0

这是我第一次与 DJango 合作。我对我的模型应该如何看起来有点困惑。

用例是:

  • 有产品。
  • 有标签。
  • 有用户。

产品和标签之间存在多对多的关系。用户和标签之间存在多对多关系。

我现在已经创建了两个应用程序。

  • 目前产品和标签属于一个应用程序:产品
  • 另一个应用程序是 usrprofile。我需要在用户个人资料中添加标签。

Tag应该驻留在哪里?并且标签会参考产品和用户吗?

代码:

应用:产品

class Product(models.Model):
    created_at = models.DateTimeField(auto_now_add = True)
    updated_at = models.DateTimeField(auto_now = True)
    name = models.CharField(max_length=300)

class Tag(models.Model):
    created_at = models.DateTimeField(auto_now_add = True)
    updated_at = models.DateTimeField(auto_now = True)
    name = models.CharField(max_length=300)
    display_name = models.CharField(max_length=300)
    product = models.ManyToManyField(Product, through='ProductTag')    

class ProductTag(models.Model):
    product = models.ForeignKey(Product,null=False)
    tag = models.ForeignKey(Tag,null=False)

APP:用户档案

class UserProfile(models.Model):
    created_at = models.DateTimeField(auto_now_add = True)
    updated_at = models.DateTimeField(auto_now = True)
    email = models.CharField(max_length=300)
4

1 回答 1

2

没有人能告诉你你的Tag模型应该放在哪里最好。构建你的应用程序和模型是你的选择。Tag如果要在和之间建立多对多关系UserProfile,可以在UserProfile模型中指定,例如:

class UserProfile(models.Model):
    # ... your other fields ...
    tags = models.ManyToManyField('product.Tag')

请注意,您必须将Tag模型与对应用程序的引用一起放在一个字符串中,product如上所示。否则,Django 会错误地假设您的模型与您的Tag模型位于同一个应用程序中UserProfile。此外,您的应用程序的名称都应该是小写的。此外,给你的多对多字段提供复数名称是一种很好的风格,即,而不是product在你的Tag模型中使用products

顺便说一句,如果您不需要向多对多关系添加额外信息,则无需定义中间模型,例如ProductTag.

于 2012-12-16T12:29:17.260 回答