因此,我创建了一个具有一些属性的模型,但我想重点关注这两个属性。
class Profile(models.Model):
RANK_OPTIONS = (
('A', 'A'),
('B', 'B'),
)
related_office = models.ForeignKey('OtherModule.office',
related_name='office',
on_delete=models.CASCADE
)
rank = models.CharField(('rank'),max_length=1, choices=RANK_OPTIONS)
基本上,我需要这两个属性是可选的,但在填充属性“ Rank”的那一刻,则还必须填充属性related_office。 您可以有一个related_office而不是一个Rank,但是一旦有了Rank,就还需要一个相关的Office。
我该怎么做?
答案 0 :(得分:1)
您可以通过覆盖for(Runnable process : processes) {
process.run();// You can other fancy stuff here.
new Thread(process).start(); // eg : spawn in new thread.
}
方法来强制执行这种条件:
save
答案 1 :(得分:1)
我不会在管理保存方法中执行此操作。如果在您的管理员中,请编写一个ModelForm并将其传递给您的管理员类,如下所示:
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = "__all__"
def clean(self):
cleaned_data = super().clean()
if cleaned_data.get("rank") and not cleaned_data.get("related_office"):
raise ValidationError('You have to select your related office for your rank')
return cleaned_data
并在您的管理类中引用该表格:
class ProfileAdmin(admin.ModelAdmin):
form = ProfileForm
如果您有自定义的html模板,请在前端或后端对其进行验证。就像上面的例子一样
答案 2 :(得分:1)
您只需在模型中覆盖clean
方法即可。
def clean(self):
if self.rank and not self.related_office:
raise ValueError({'related_office':["related_office is required!"]})