我的www.example.com文件中有两个模型models.py:
风味型号:
class Flavour(models.Model):
flavour_choice = models.CharField(null=True, blank=True, max_length=254)
def __str__(self):
return self.flavour_choice
产品型号:
class Product(models.Model):
category = models.ForeignKey(
'Category', null=True, blank=True, on_delete=models.SET_NULL
)
slug = models.SlugField()
sku = models.CharField(max_length=254, null=True, blank=True)
name = models.CharField(max_length=254)
brand = models.TextField()
has_flavours = models.BooleanField(default=False, null=True, blank=True)
flavours = models.ForeignKey(
'Flavour', null=True, blank=True, on_delete=models.SET_NULL
)
has_strength = models.BooleanField(default=False, null=True, blank=True)
strength = models.ForeignKey(
'Strength', null=True, blank=True, on_delete=models.SET_NULL
)
description = models.TextField()
price = models.DecimalField(max_digits=6, decimal_places=2)
rating = models.DecimalField(max_digits=6, decimal_places=2, null=True, blank=True)
image_url = models.URLField(max_length=1024, null=True, blank=True)
image = models.ImageField(null=True, blank=True)
display_home = models.BooleanField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ('-created_at',)
def __str__(self):
return self.name
我希望能够添加口味到口味表,然后选择它们是否出现在特定的产品中。我该怎么做呢?我知道我可以只添加口味到产品中,但我想拥有的许多产品都有相同的口味。
我需要能够做到这一点的数据库方面,而不仅仅是编程,使管理员用户可以添加口味和产品通过前端产品管理页面。
3条答案
按热度按时间cuxqih211#
您可以使用ManyToMany关系,在这种关系中,多种口味可用于多种不同的产品。https://docs.djangoproject.com/en/4.1/topics/db/examples/many_to_many/
alen0pnh2#
首先关于你的模型和字段。你可以在
Flavour
模型中使用模型选择,但这不是必须的。你可以去掉has_flavours
和has_strength
字段,使用模型属性和flavours
和strengths
关系来获得想要的输出。另外,正如在另一个答案中提到的,用多对多关系替换
Flavour
和Product
之间的关系,以避免在数据库中重复。最后,image_url
也是不必要的,因为您使用的是models.ImageField
,可以通过属性(例如instance.image.url
)访问图像url。models.py
一个简单的例子,关于你如何将一种口味与一种特定的产品联系起来:
tests.py
我还会考虑使用
one-to-many
关系为brand = models.TextField()
创建模型的可能性。mf98qq943#
最后我走了一条不同的路线,因为我把问题搞得过于复杂。
我添加了一个变体模型:
现在我可以使用if语句在for循环中调用模板中的口味,循环迭代产品变体模型中与产品相关的所有口味。