0

私は2つのモデルを持っています:

class Category(models.Model):
    title = models.CharField(max_length=250)
    ### other fields

class Album(models.Model):
    category = models.ForeignKey(Category)
    subject = models.CharField(max_length=200)
    ### other fields...

.

特定のカテゴリでアルバムをフィルタリングするためのビューを作成しました。また、それらすべてを home.html テンプレートに入れたいです。

#views.py
def commercial(request):
    commercial_subjects = Album.objects.filter(category__title__contains="commercial" )
    return render(request, 'gallery/index.html', {'commercial_subjects': commercial_subjects})

そして、それは商用カテゴリだけでうまく機能します。このようなカテゴリごとに複数のビューを書きたい場合は、ハードコーディングのように思えます。必要なのは、すべてのカテゴリとそれに関連する album.subject を自動的に表示するビューまたはフィルタリング プロセスです。したがって、最終結果は次のようになります。

個人的

  • アルバム 1
  • アルバム 2

商業

  • アルバム4
  • アルバム5

どうやってやるの?

4

2 に答える 2

1

それは簡単です。まず、外部キーにrelated_nameを指定します。

class Album(models.Model):
    category = models.ForeignKey(Category, related_name='albums')

ビューからすべてのカテゴリを渡します。

def myView(request):
    categories = Category.objects.all()
    return render(request, 'gallery/index.html', {'categories': categories})

次にテンプレートで:

<ul>
    {% for category in categories %}
        <li>{{ category.title }}</li>
        {% with category.albums.all as albums %}
            {% if albums %}
                <ul>
                   {% for album in albums %}
                      <li>{{ album.subject }}</li>
                   {% endfor %}
                 <ul>
            {% endif %}
        {% endwith %}
    {% endfor %}
</ul>
于 2013-04-19T10:05:10.653 に答える
0
#views.py
def commercial(request):
    commercial_subjects = Album.objects.filter(category__title="commercial")
于 2013-04-19T10:02:18.097 に答える