【发布时间】: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