首页 > 解决方案 > 如何在 Django html 页面中显示外键数据?

问题描述

我想在其相关公司下方显示公司标题及其产品。我是 django 的新手,我不完全理解这一点。

我的模型.py

class Company(models.Model):
    name = models.CharField(max_length=250)

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


class Products(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name="display")
    engine = models.CharField(max_length=250, blank=True)
    cyl = models.CharField(max_length=250, blank=True)
    bore = models.CharField(max_length=250, blank=True)

def __str__(self):
    return str(self.engine) + "  (ref:" + str(self.ref) + ")"

我的意见.py:

def Companies(request):
context = {
    'categories': Company.objects.all()
}
return render(request, 'product_list.html', context)

我的html:

                {% for category in categories %}
            <h2>{{ category.name }}</h2>
            {% for item in category.item_set.all %}
                {{ item_engine }}
            {% endfor %}
        {% endfor %}

标签: djangodjango-modelsdjango-views

解决方案


仅对您的 HTML 文件进行如下更改,如果您使用的是 product_set.all,请确保类名是 Product:

{% for category in categories %}
            <h2>{{ category.name }}</h2>
            {% for item in category.product_set.all %}
                {{ item.engine }}
            {% endfor %}
        {% endfor %}

如果仍然无法正常工作,请尝试删除 : + " (ref:" + str(self.ref) + ")" 而且,我认为您错误地显示了您的 models.py。str函数应该在如下类中:

class Company(models.Model):
    name = models.CharField(max_length=250)

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


class Product(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE, 
    related_name="display")
    engine = models.CharField(max_length=250, blank=True)
    cyl = models.CharField(max_length=250, blank=True)
    bore = models.CharField(max_length=250, blank=True)

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

推荐阅读