Django 德扬戈。对象来自多个模型,如何正确显示url?

Django 德扬戈。对象来自多个模型,如何正确显示url?,django,Django,我有两个模型。我按这些模型过滤对象,并在模板中显示它们。 一切正常,但url出现错误 myURL.py path('objects_model_A/<int:objects_A_id>', views.objects_A, name='objects_model_A'), path('objects_model_B/<int:objects_B_id>', views.objects_B, name='objects_model_B'), def index(reque

我有两个模型。我按这些模型过滤对象,并在模板中显示它们。 一切正常,但url出现错误

myURL.py

path('objects_model_A/<int:objects_A_id>', views.objects_A, name='objects_model_A'),
path('objects_model_B/<int:objects_B_id>', views.objects_B, name='objects_model_B'),
def index(request):
    objects_A = objects_A.objects.all().filter(is_published=True)
    objects_B = objects_B.objects.all().filter(is_published=True)
    queryset_list = list(chain(objects_A, objects_B))
    context = {'queryset_list': queryset_list}
    return render(request, 'templates/index.html', context)

def objects_A(request, objects_A_id):
    objects_A = get_object_or_404(objects_a, pk=objects_A_id)
    context = {
        'objects_A': objects_A
    }
    return render(request, 'templates/objects_A.html', context)

def objects_B(request, objects_B_id):
    objects_B = get_object_or_404(objects_b, pk=objects_B_id)
    context = {
        'objects_A': objects_A
    }
    return render(request, 'templates/objects_B.html', context)
我的模板.html

{% if queryset_list %}
    {% for listing in queryset_list %}
        <div class="col-md-6 col-lg-4 mb-4">
            <div>
                <a href="{% url 'objects_model_A' listing.id %}">Link
                </a>
    {% endfor %}
{% endif %}
具有模型的对象\u B,url也是:

http://127.0.0.1:8000/objects_A/1

我理解模板中的错误。第
行通常在模型级别使用。因此,您可以这样实现:

from django.urls import reverse

class objects_A(models.Model):

    # ...

    def get_absolute_url(self):
        return reverse('objects_model_A', kwargs={'objects_A_id': self.pk})

class objects_B(models.Model):

    # ...

    def get_absolute_url(self):
        return reverse('objects_model_B', kwargs={'objects_B_id': self.pk})
从django.url反向导入
类对象(models.Model):
# ...
def get_绝对_url(自身):
返回反向('objects\u model\u A',kwargs={'objects\u A\u id':self.pk})
类对象(models.Model):
# ...
def get_绝对_url(自身):
返回反向('objects\u model\u B',kwargs={'objects\u B\u id':self.pk})
然后,您可以在模板中使用:

{% for listing in queryset_list %}
    <div class="col-md-6 col-lg-4 mb-4">
        <div>
            <a href="{{ listing.get_absolute_url }}">Link</a>
        </div>
    </div>
{% endfor %}
{%用于在queryset_列表%中列出]
{%endfor%}
Django有一些工具将
get\u absolute\u url
考虑在内。例如,您可以使用
get\u absolute\u url
方法将模型对象传递给a,然后Django将重定向到该对象的
get\u absolute\u url()
结果。

Willem Van Onsem,您好!这是我唯一需要的!!谢谢,效果很好!
http://127.0.0.1:8000/objects_B/1
from django.urls import reverse

class objects_A(models.Model):

    # ...

    def get_absolute_url(self):
        return reverse('objects_model_A', kwargs={'objects_A_id': self.pk})

class objects_B(models.Model):

    # ...

    def get_absolute_url(self):
        return reverse('objects_model_B', kwargs={'objects_B_id': self.pk})
{% for listing in queryset_list %}
    <div class="col-md-6 col-lg-4 mb-4">
        <div>
            <a href="{{ listing.get_absolute_url }}">Link</a>
        </div>
    </div>
{% endfor %}