0

DJangoと一緒に仕事をするのはこれが初めてです。モデルがどのように見えるべきかについて少し混乱しています。

ユースケースは次のとおりです。

  • 商品あります。
  • タグあります。
  • ユーザーがいます。

商品とタグの間には多対多の関係があります。ユーザーとタグの間には多対多の関係があります。

現在、2 つのアプリを作成しています。

  • 現在、製品とタグは 1 つのアプリに属しています: 製品
  • 別のアプリは usrprofile です。そして、ユーザー プロファイルにタグを追加する必要があります。

タグはどこに置くべきですか? そして、タグは製品とユーザーの両方を参照しますか?

コード:

アプリ: 製品

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に、アプリへの参照とともにモデルを文字列に入れる必要があることに注意してください。そうしないと、Django は、モデルがモデルと同じアプリにあるproductと誤って想定します。また、アプリの名前はすべて小文字にする必要があります。さらに、多対多のフィールドに複数形の名前を付けるのは良いスタイルです。つまり、モデルの使用ではなく。TagUserProfileproductTagproducts

ちなみに、多対多の関係に追加情報を追加する必要がない場合は、 などの中間モデルを定義する必要はありませんProductTag

于 2012-12-16T12:29:17.260 に答える