我有以下Django模型:
class Owner(models.Model):
name = models.CharField(max_length=30)
class Dog(models.Model):
name = models.CharField(max_length=30)
owner = models.ForeignKey(Owner)
class GoForAWalk(models.Model):
date = models.DateTimeField()
location = models.CharField()
owner = models.ForeignKey(Owner)
dog = models.ForeignKey(Dog)
我希望Owner
只能用他自己的Dog
中的一个GoForAWalk
。
目前,任何主人都可以和任何狗一起散步。
在创建新的GoForAWalk
对象时,您会通过模型验证器或某些逻辑来限制这一点吗?
有人能举个例子吗?我被卡住了。
非常感谢!
干杯,Philipp
GoForAWalk
不需要owner
,因为它"带有";dog
,所以如果狗去散步,你已经知道和谁在一起了。只需从GoForAWalk
中删除owner
。这将修复可能出现的不一致。
您可以在full_clean方法中对您的模型进行验证:
class GoForAWalk(models.Model):
date = models.DateTimeField()
location = models.CharField()
owner = models.ForeignKey(Owner)
dog = models.ForeignKey(Dog)
def full_clean(self, **kwargs):
super().full_clean(**kwargs)
if self.dog.owner != self.owner:
raise ValidationError(...)
关于full_clean的一些信息:https://docs.djangoproject.com/fr/4.1/ref/models/instances/#django.db.models.Model.full_clean
使用上一个Django版本,可能会使用新的模型约束来制作一些东西:https://docs.djangoproject.com/fr/4.1/ref/models/instances/#validating-对象