Django反向外键关系不起作用

时间:2018-04-23 09:26:20

标签: python django

你好,我在2天后就已经陷入困境,以获得反向关系。 我想把“bilder”的照片变成相关的“doku”。 该网站返回{{doku.name}},但没有来自相关模型“bilder”

的循环

我尝试了几乎所有在互联网上找到的东西,但也许我只是监督了什么?

这是我的models.py:

class Doku(models.Model):
    name = models.CharField(max_length=1000)
    inhalt = models.TextField(blank=True, null=True)
    erstellungsdatum = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name = "Dokumentation"
        verbose_name_plural = "Dokumentationen"

    def __str__(self):
        return self.name

class Bilder(models.Model):
    doku = models.ForeignKey(Doku, on_delete=models.CASCADE)
    name = models.CharField(max_length=1000)
    bilder = models.ImageField(upload_to="bilder/doku/")

    def __str__(self):
        return self.name

my views.py

@login_required(login_url='login')
def Dokus(request):
    doku = Doku.objects.all()
    context = {'doku':doku}
    return render(request, "doku/index.html", context)

和我的模板:

{% for doku in doku %}
    <a href="{% url 'apps:DokuDetail' doku.pk %}">{{ doku.name }}</a>
    {{ doku.bilder.name }}


    {% for bilder in doku.bilder_set.all %}
        <img src="{{ bilder.bilder.url }}">
        <p>{{ bilder.name }}</p>
    {% endfor %}
{% endfor %}

编辑:这是我的urls.py:

from django.urls import path
from . import views

from django.contrib.auth import views as auth_views

app_name = "apps"
urlpatterns = [

    path('doku/', views.Dokus, name="Doku"),
    path('doku/create', views.DokuCreate.as_view(), name="DokuCreate"),
    path('doku/detail/<int:pk>', views.DokuDetail.as_view(), name="DokuDetail"),
    path('doku/update/<int:pk>', views.DokuUpdate.as_view(), name="DokuUpdate"),
    path('doku/delete/<int:pk>', views.DokuDelete.as_view(), name="DokuDelete"),

    path('doku/picadd', views.BilderCreate.as_view(), name="DokuBilderCreate"),


]

1 个答案:

答案 0 :(得分:0)

{{ doku.bilder.name }}无效。删除它。

同样,{{dokubilder.dokubilder.url}}无效,因为模板上下文中没有dokubilder

对于您发布的模型,在模板中循环{% for bilder in doku.bilder_set.all %}应该有效。如果没有,您需要提供有关如何重现问题的更多信息。

我建议你为实例和查询集使用不同的变量名,例如: {% for doku in docku_list %}。如果您将其更改为docku_list,请记住更新您的观点。

{% for doku in dokus %}
    <a href="{% url 'apps:DokuDetail' doku.pk %}">{{ doku.name }}</a>

    {% for bilder in doku.bilder_set.all %}
        <p>{{ bilder.name }}</p>
    {% endfor %}

{% endfor %}