【问题标题】:How to display name of table from queryset in django如何在django中显示查询集中的表名
【发布时间】:2023-01-11 03:28:23
【问题描述】:

试图在 django 中获取表名,我需要它通过 if statemnet 正确显示详细视图。 我有这样的观点要展示

class Home(ListView):
    template_name = 'home.html'
    def get_queryset(self):
        qs1 = Book.objects.all()
        qs2 = CD.objects.all()
        qs3 = Film.objects.all()
        queryset = sorted(list(chain(qs1, qs2, qs3)), key=operator.attrgetter('title'))
        return queryset

它返回给我这个

[<CD: 音乐 1>, <CD: 音乐 2>, <Book: 一些书>]

如何在此模板中获取“CD”或“Book”

{% block content %}
<div class="row">
{% for object in object_list %}
    <div class="col-md-3">
        <div class="card card-product-grid">
            <img src="{{ object.image.url }}">
            <a href="{% url 'DetailBook' object.pk %}" class="title">{{ object.title }}</a>
        </div>
    </div>
{% endfor %}
</div>
{% endblock content %}

同时,如果显示 detailview 和 listview 是个坏主意,而且它的做法不同,请告诉我,我将不胜感激

我尝试了在循环中显示 object.key 的不同方式,但效果不是很好。和其他查询集查询。

【问题讨论】:

  • 查看django-polymorphic。它确实有助于继承。它有一个 .instance_of() 方法,可以只返回“cd”对象或只返回“book”对象。

标签: python django


【解决方案1】:

我一直在 list(chain(ob1, ob2, .. obn) 路线下。从代码可维护性和复杂性的角度来看,它被证明是非常乏味的。 Django Polymorphic 是去这里的路。

from polymorphic.models import PolymorphicModel

class Product(PolymorphicModel):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='products')
    title = models.CharField(max_length=100)
    slug = ...
    ... more fields all products share ex: price

    def __str__(self):
        return str(self.title)

    @property
    def model_name(self):
        return self._meta.model_name

class Cd(Product):
    <model fields for CD model>

class Book(Product):
    <model fields for book model>

class Film(Product):
    <model fields for film model>

然后:

Product.objects.all()

将返回所有 CD、Book 和 Film 对象的实例。

在您的模板中,您可以使用属性model_name 来检查对象是否是某种类型的模型。

{% block content %}
<div class="row">
{% for object in object_list %}
    {% if object.model_name == 'book' %}
    <div class="col-md-3">
        <div class="card card-product-grid">
            <img src="{{ object.image.url }}">
            <a href="{% url 'DetailBook' object.pk %}" class="title">{{ object.title }}</a>
        </div>
    </div>
    {% endif %}
{% endfor %}
</div>
{% endblock content %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 2012-05-28
    • 1970-01-01
    • 2021-10-03
    • 2023-01-09
    • 2021-12-28
    • 2021-05-29
    • 2021-11-17
    相关资源
    最近更新 更多