3

複数のオブジェクトに対してクエリを実行し、関連するオブジェクトの詳細ビューでそれらを一緒に使用する方法についてのアドバイスを探しています。これが私が今取り組んでいるものです:

-- app/models.py --

class Material(models.Model):
  created = models.DateTimeField(auto_now_add=True)
  updated = models.DateTimeField(auto_now=True)
  title = models.CharField(max_length=50)
  slug = models.SlugField()
  description = models.TextField()

  def __str__(self):
    return self.title

class Category(Material):
  parent = models.ForeignKey('self', related_name='children')

class Content(Material):
  author = models.ForeignKey(User)
  category = models.ForeignKey(Category)

class SomeObject(Content):
  # Model specific properties and methods

class SomeOtherObject(Content):
  # Model specific properties and methods

私が達成しようとしているのは、カテゴリの詳細ビューに SomeObject と SomeOtherObject の両方を一緒に表示することです。これらのモデルにはそれぞれ異なる属性があり、これらのモデルを互いに一意なものにしています。これは、一般的な外部キーが役立つ状況ですか?

-- app/templates/category_detail.html --

{% block content %}
  <header class="category-header">
    <h1 class="category-title">{{ category.title }}</h1>
  </header><!-- .category-header -->

  <section class="category-items">
    {% for item in category.manager_that_queries_both.all %}
      # Display each item differently depending on the type
    {% empty %}
      "Oops, we couldn't find anything for this category!"
    {% endfor %}
  </section><!-- .category-items -->
{% endblock %}

できれば、この製品の存続期間中維持することが困難になるハックには近づかないようにしたいと思います。助けてくれてありがとう =)

4

2 に答える 2

2

Django Model Utilsmanager_that_queries_both.all使用できます。

特にInheritance Manager

外部キーは基本クラスを参照します。そして、それらをクエリできます

Material.objects.select_subclasses()

オブジェクトのタイプに応じてテンプレートで処理を行うには、ここで説明するフィルターを実装できます。

于 2014-01-18T20:16:10.973 に答える
1
class SomeObject(Content):
    # model_specific_arttributes
    is_some_object = True

class SomeOtherObject(Content):
    is_some_object = False

これで、テンプレート内のステートメントを使用ifして 2 種類のオブジェクトを区別し、異なるテンプレートを使用してそれらを表示できるようになりました。

于 2014-01-18T20:38:58.637 に答える