我正在寻找在Django模型中实现这种机制的最有效的方法。 假设有两个非常简单的模型:
class FKModel(models.Model):
value = BooleanField()
class AModel(models.Model):
fk = models.ForeignKey(FKModel)
a_value = models.CharField(max_length=150)
def clean(self, *args, **kwargs):
# the line below is incorrect
if not self.fk.value: # <--- how to do this in a proper way?
raise ValidationError('FKModel value is False')
super(AModel, self).clean(*args, **kwargs)
def save(self, *args, **kwargs):
self.full_clean()
super(AModel, self).save(*args, **kwargs)
我知道,我可以做一些类似FKModel.objects.all()/.get()
的事情,但我认为这不是最好的解决方案(因为它需要对数据库的额外请求)
我不确定您试图在
clean()
方法中做什么,但我假设您正在尝试为外键约束一个NOTNULL条件。默认情况下,所有字段都不受null约束,如果希望字段接受null,则必须设置null=False
和blank=False
:如果要手动约束字段的NOTNULL条件,应按如下方式执行:
要检索数据库记录及其相关记录,请使用“预回迁相关记录”(prefetch_related),并在一次数据库点击中获取记录及其相关记录:
相关问题 更多 >
编程相关推荐