چطوری میشه که از چندین مدل در ListView استفاده کرد احتمال زیاد در یک Template چندین مدل باید باشند چطور میشه همچین کاری رو کرد
سلام وقت بخیر
در جنگو میتوانید از چندین مدل در یک ListView استفاده کنید. برای این کار، شما میتوانید از مدلهای مختلفی که میخواهید استفاده کنید، query setهای مجزا ایجاد کنید و آنها را با هم ترکیب کنید.
برای مثال، فرض کنید که شما دو مدل Post و Comment دارید و میخواهید هر دو مدل را در یک ListView نمایش دهید. شما میتوانید دو query set مجزا برای هر مدل ایجاد کنید و آنها را با هم ترکیب کنید. به کد زیر توجه کنید:
from django.views.generic import ListView
from .models import Post, Comment
classPostAndCommentListView(ListView):
template_name = 'post_and_comment_list.html'defget_queryset(self):
post_queryset = Post.objects.all()
comment_queryset = Comment.objects.all()
returnlist(post_queryset) + list(comment_queryset)
در این مثال، ما یک view به نام PostAndCommentListView ایجاد کردهایم که query setهای مجزا برای مدلهای Post و Comment ایجاد میکند و آنها را با هم ترکیب میکند. سپس این query set ترکیب شده در ListView نمایش داده میشود.
در Template نیز میتوانید به راحتی به اطلاعات هر مدل دسترسی پیدا کنید. مثلاً برای فرض کنید که شما میخواهید Postها را با عنوان "Posts" و Commentها را با عنوان "Comments" در ListView نمایش دهید. به کد زیر توجه کنید:
<ul><h2>Postsh2>
{% for post in object_list %}
{% if post.__class__.__name__ == 'Post' %}
<li>{{ post.title }}li>
{% endif %}
{% endfor %}
<h2>Commentsh2>
{% for comment in object_list %}
{% if comment.__class__.__name__ == 'Comment' %}
<li>{{ comment.body }}li>
{% endif %}
{% endfor %}
ul>
در این قالب، ما ابتدا تمامی اشیاء در query set را بررسی میکنیم و اگر آنها مربوط به مدل Post باشند، عنوان پست را در لیست نمایش میدهیم. به همین شکل برای نمایش Commentها نیز عنوان و متن آنها را در لیست نمایش میدهیم.
اگر تعداد مدلها بیشتر شد، شما همین الگو را پیش از این برای مدلهای جدید به کار خواهید برد.