2

私はブログサイトを構築しており、カテゴリと投稿に関するモデルを持っています。投稿には、カテゴリの多対多の関係があります。

class Post(models.Model):
     categories = models.ManyToManyField(Category)

テンプレートのカテゴリリストで、実際に投稿があるカテゴリのみをロードしたいという事実を除けば、すべてが正常に機能しています。

カテゴリが空の場合は表示したくありません。カテゴリで投稿への関係を定義して、のようなものを使用できるようにしました{{ if category.posts }}。現時点では、カテゴリで別の多対多フィールドを使用すると、管理者に余分なフィールドが与えられますが、これは私が本当に望んでいないか、必要だと感じていません。

この関係をどのようにナビゲートするか、または適切な関係を作成するのが最善ですか?

乾杯ケブ

4

2 に答える 2

5

Django は、ForeignKey または ManyToMany 関係の関連モデルにフィールドを自動的に作成します。次のような related_name オプションを使用して、関連モデルのフィールドの名前を制御できます。

class Post(models.Model):
 categories = models.ManyToManyField(Category,related_name='posts')

このようにして、追加のフィールドなしでアプローチが機能します。ところで、 related_name 引数を省略した場合、Django はデフォルトで [field_name]_set を持つものを作成します。

于 2012-08-31T15:27:58.053 に答える
0

reverse relationsフィールドで使用できManyToManyます。逆フィルターでは、関連するモデル名を使用する必要があります (属性を使用しなかった場合related_name)。したがって、質問では、モデル名を次のように逆の名前として使用できます。

{% if category.post %}

ビューのフィルタリング関数でこれを使用することもできます。

Category.objects.filter(post__isnull=False)

逆リレーション名は小文字にする必要があります。

ここでドキュメントを確認してください

于 2012-08-31T15:31:34.523 に答える