假设我在Django中有以下多对一关系:
from django.db import models
class Person(models.Model):
# ...
class Address(models.Model):
# ...
person = models.ForeignKey(Person, on_delete=models.CASCADE)
这允许一个人拥有多个地址。
我希望强制要求一个人至少拥有一个地址,这样就无法在数据库中保存没有地址的人。
我如何实现这一目标?是否可以强制使用相关字段(可以使用blank=False
对“普通”字段执行此操作)?
答案 0 :(得分:1)
如前所述,没有办法直接在数据库上强制实施关系。
但是,您可以通过在使用clean()
方法保存之前验证模型来处理它。它将在为Django模型保存时自动触发。
class Person(models.Model):
.
.
.
def clean(self):
if len(self.addresses) == 0:
raise ValidationError('At least one address is required.')
答案 1 :(得分:0)
为什么不在Person上建立多对多的关系?这似乎是您数据的更自然的表达。
但无论如何,你无法真正对数据库实施多对多的实施。您可以覆盖Person的保存以检查地址。但我更愿意在表单逻辑中处理它。