Как найти способ одновременного отображения объекта комментария и данных телевизора?
Я делаю то, что хочу делать
Я хочу отобразить комментарий пользователя и данные, которые ищутся по tv_id в объекте комментария.
У каждого объекта комментария есть tv_id.
Я хочу получить данные по TV_id каждого объекта комментария и отобразить их в HTML вместе с комментарием. Однако я не могу найти способ одновременного отображения объекта комментария и данных TV. Как я могу это сделать?
Текущее состояние
class TV(models.Model):
id = models.CharField(primary_key=True, editable=False,
validators=[alphanumeric],max_length = 9999)
stars = models.FloatField(
blank=False,
null=False,
default=0,
validators=[MinValueValidator(0.0),
MaxValueValidator(10.0)]
)
def get_comments(self):
return Comment_tv.objects.filter(tv_id=self.id)
def average_stars(self):
comments = self.get_comments()
n_comments = comments.count()
if n_comments:
self.stars = sum([comment.stars for comment in comments]) / n_comments
else:
self.stars = 0
return self.stars
class Comment_tv(models.Model):
class Meta:
unique_together = ('user', 'tv',)
comment = models.TextField(max_length=1000)
stars = models.FloatField(
blank=False,
null=False,
default=0,
validators=[MinValueValidator(0.0),
MaxValueValidator(10.0)]
)
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
tv = models.ForeignKey(TV, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
unique_together = ('user', 'tv')
indexes = [
models.Index(fields=['user', 'tv']),
]
data = requests.get(f"https://api.themoviedb.org/3/tv/{tv_id}?api_key={TMDB_API_KEY}&language=en-US")
class Comment_List_TV(ListView):
template_name = 'account/user_comment_list_tv.html'
def get_queryset(self):
Comment_list_query = Comment_tv.objects.none()
if self.request.user.is_authenticated:
Comment_list_query = Comment_tv.objects.filter(user=self.request.user)
return Comment_list_query
Хорошей практикой является добавление context_object_name
в ваши общие представления, так у вас будет более узнаваемое имя для набора queryset в ваших шаблонах.
class Comment_List_TV(ListView):
###
context_object_name = "comment_tv_list" # This is what the list will be called in the template
###
template_name = 'account/user_comment_list_tv.html'
def get_queryset(self):
Comment_list_query = Comment_tv.objects.none()
if self.request.user.is_authenticated:
Comment_list_query = Comment_tv.objects.filter(user=self.request.user)
return Comment_list_query
Затем в вашем шаблоне:
{% for comment_tv in comment_tv_list %}
{{ comment_tv.user }}
{{ comment_tv.comment }}
{{ comment_tv.stars }}
{{ comment_tv.tv.id }}
{% endfor %}