Python 如何在Django中强制设置相关字段?

Python 如何在Django中强制设置相关字段?,python,django,django-models,relationship,Python,Django,Django Models,Relationship,假设我在Django中有以下多对一关系: from django.db import models class Person(models.Model): # ... class Address(models.Model): # ... person = models.ForeignKey(Person, on_delete=models.CASCADE) 这允许一个人有多个地址 我希望强制规定一个人至少有一个地址,因此不可能在DB中保存一个没有地址的人 我怎样才能

假设我在Django中有以下多对一关系:

from django.db import models

class Person(models.Model):
    # ...

class Address(models.Model):
    # ...
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
这允许一个人有多个地址

我希望强制规定一个人至少有一个地址,因此不可能在DB中保存一个没有地址的人


我怎样才能达到这个目标?是否可以将相关字段设置为必填字段(对于“正常”字段,可以使用
blank=False
)?

为什么不将地址设置为Person上的多对多关系?这似乎是数据更自然的表达方式


但不管怎样,您不能在db上真正实施多对多的实现。您也许可以覆盖Person的save来检查地址。但我更愿意用逻辑的形式来处理它

如前所述,无法直接在数据库上强制执行关系

但是,您可以通过在保存之前使用
clean()
方法验证模型来解决此问题。对于Django型号,它将在保存时自动触发

class Person(models.Model):
    .
    .
    .
    def clean(self):
        if len(self.addresses) == 0:
            raise ValidationError('At least one address is required.')