【问题标题】:django model multiple primary keysdjango模型多个主键
【发布时间】:2019-11-28 12:01:34
【问题描述】:

我有 4 个模型:公司、商店、产品和库存。 库存模型对其他模型有 3 个 ForeignKey,我需要在创建库存时,同一产品只能在公司的商店中插入一次。

型号:

class Company(models.Model):
    owner = models.OneToOneField(User, on_delete=models.CASCADE, related_name='company')
    name = models.CharField(max_length=150, unique=True, null=False)
    type_choices = [('Retailer', 'Retailer'), ('Provider', 'Provider')]
    type = models.CharField(choices=type_choices, max_length=12, null=False)
    dropshipping = models.BooleanField(default=False)
    city = models.CharField(max_length=24, null=False)
    postal_code = models.IntegerField(null=False)
    address = models.CharField(max_length=256, null=False)
    phone = models.CharField(max_length=24, null=False)
    is_active = models.BooleanField(default=False)
    date_created = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.name

class Store(models.Model):
    location = models.CharField(max_length=100, null=False)
    company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='store_owner')

    def __str__(self):
        return self.location

class Product(models.Model):
    name = models.CharField(max_length=256, unique=True, null=False)
    brand = models.CharField(max_length=128, null=False)
    date_added = models.DateTimeField(default=timezone.now)
    image = models.ImageField(upload_to = 'static/img/')

    def __str__(self):
        return self.name

class Stock(models.Model):
    price = models.DecimalField(max_digits=8, decimal_places=2, null=False)
    quantity = models.IntegerField(null=False)
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='product_stock')
    company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='company_stock')
    store = models.ForeignKey(Store, on_delete=models.CASCADE, related_name='store_stock')

我怎样才能做到这一点?

【问题讨论】:

  • “商店”已经与“公司”相关。所以在“Stock”模型中不需要ForeignKey。
  • 请参阅stackoverflow.com/questions/2201598/…,了解如何将列组合在一起以使它们的组合独一无二。这样,您仍然可以在模型中拥有唯一的主键字段,这可能会非常方便。

标签: django django-models


【解决方案1】:

完美,可以使用

class Meta:
    unique_together = ('product', 'store')

关于库存模型

【讨论】:

    猜你喜欢
    • 2013-02-06
    • 2021-10-31
    • 2014-12-24
    • 2016-04-02
    • 1970-01-01
    • 2020-11-26
    • 2011-12-03
    • 2023-01-26
    • 1970-01-01
    相关资源
    最近更新 更多