我正在设计一个送货应用程序。它有用户,地址和商店模型。我有以下要求:
模型如下:
class User(AbstractBaseUser):
...
class Address(models.Model):
...
class Store(models.Model):
...
第一项要求可以显示为:
user = models.ForeignKey(User, on_delete=models.CASCADE)
第二个要求可以显示为(在地址模型中):
store = models.OneToOneField(Store, on_delete=models.CASCADE)
此外,第二个要求可以显示为(在商店模型中):
address = models.OneToOneField(Address, on_delete=models.CASCADE)
表示第三个要求的最佳方式是什么。在这种情况下如何处理序列化?
感谢。
答案 0 :(得分:0)
如果您在地址模型上居中或遇到问题,可以在validation期间处理此案例:
class Address(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
store = models.OneToOneField(Store, on_delete=models.CASCADE, null=True)
def clean(self):
if self.user != None and self.store != None:
raise ValidationError('Address must belong EITHER to user OR store, not both', code='invalid')
如果两个字段均为None
,您可能还需要处理此案例。请注意,在数据库级别上,两个字段都需要被允许为null=True
。