Атрибут Django ForaignKey не отображается в html
Итак, у меня есть несколько моделей, связанных между собой. И в моих представлениях я получаю модели глав, упорядоченные по дате публикации, затем удаляю те, в которых есть та же манга (по ключу, связанному с другой моделью). Но, очевидно, для полей, не связанных ни с чем, я не могу получить доступ к полям моделей. Но также, поскольку я работаю с quaryset, я не могу сортировать по id или чему-либо еще, также нужно получить доступ к полям моделей манги, связанным с главой. но это не отображается в html. как я могу это сделать?
мои модели :
class Manga(models.Model):
manga_name = models.CharField(max_length= 255, default="null")
manga_image = models.ImageField(upload_to="thumbnail", default="thumbnail/noimage.png")
manga_views=models.IntegerField(default=0)
def __str__(self):
return f"{self.id}, {self.manga_name}"
class Fansub(models.Model):
fansub_name = models.CharField(max_length=255, default="null")
def __str__(self):
return f"{self.id}, {self.fansub_name}"
class Chapter(models.Model):
chapter_number = models.IntegerField(default=0)
chapter_url = models.URLField(default="www.example.com")
manga = models.ForeignKey(Manga, on_delete=models.CASCADE)
fansub = models.ForeignKey(Fansub, on_delete= models.CASCADE)
relase_date= models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.chapter_number}, {self.manga}, {self.fansub}"
Мое мнение :
def Index(request):
manga = Manga.objects.all()
chapter = Chapter.objects.all().values()
fansub = Fansub.objects.all().values()
mostview = manga.order_by("-manga_views")[:5]
relasedateorder = chapter.order_by("relase_date")
context= {
"Manga": manga,
"Chapter": chapter,
"Fansub": fansub,
"Mostview": mostview,
"LastUpdated": relasedateorder,
}
template = loader.get_template("Index.html")
и, наконец, html:
{%for d in LastUpdated%}
<p>{{d.manga}}</p>
{%endfor%}
В вашем представлении вы используете метод values для кверисета Chapter, который возвращает кверисет словарей вместо объектов Chapter. Чтобы получить доступ к связанному объекту Manga, вам нужно изменить представление, чтобы оно возвращало кверисет объектов Chapter следующим образом:
def Index(request):
manga = Manga.objects.all()
chapter = Chapter.objects.all().order_by("relase_date")
fansub = Fansub.objects.all().values()
mostview = manga.order_by("-manga_views")[:5]
context= {
"Manga": manga,
"Chapter": chapter,
"Fansub": fansub,
"Mostview": mostview,
}
template = loader.get_template("Index.html")
#HTML
{% for chapter in Chapter %}
<p>{{chapter.manga.manga_name}}</p>
{% endfor %}
Вы можете получить доступ ко всем экземплярам модели Manga
, связанным с экземпляром chapter
, используя _set
в качестве суффикса следующим образом:
{% for i in LastUpdated %}
<p>{{i.chapter_number}}</p>
<h2> manga model attributes below</h2>
{% for j in i.manga_set.all %}
{{j.manga_name}}
{{j.manga_views}}
{% endfor %}
{% endfor %}
Также вы должны использовать Chapter.objects.all().order_by("relase_date")
этот кверисет, так как использование .values()
дает вам пару ключ-значение (dict).