簡體   English   中英

在Django中表達多個一對多和一對一關系

[英]Express multiple one-to-many and one-to-one relationship in Django

我正在設計一個交付應用程序。 它具有用戶,地址和商店模型。 我有以下要求:

  1. 用戶可以有多個收貨地址
  2. 商店僅位於一個位置。
  3. 地址不能同時與用戶和商店鏈接。

模型如下:

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)

代表第三項要求的最佳方法是什么。 在這種情況下,如何處理序列化?

謝謝。

如果您以地址模型為中心或存在問題,可以在驗證期間處理這種情況:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM