Я создал веб-сайт и использовал свою модель Post в DetailView CBV. У меня есть другая модель под названием «UserProfileInfo», в которой у меня есть поле изображения. Я хочу отобразить автора сообщения pi c рядом с его именем в шаблоне post_detail. Как я могу это сделать? Я знаю, что не могу указать 2 модели в качестве моделей в функции DetailView. Я подумал о том, чтобы как-то добавить ее в представление get_context_data. Не знаю.
Соответствующий код:
Модели :
class UserProfileInfo(models.Model):
user = models.OneToOneField(User, models.PROTECT)
# mode ls.PROTECT is an on_delete value which protect the source model and if he is not existed or having a problem he raises an Error to alert us
# additional
portfolio_site = models.URLField(blank=True)
profile_pic = models.ImageField(upload_to='TheApp/profile_pics',blank=True)
def __str__(self):
return self.user.username
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.PROTECT)
title = models.CharField(max_length=200)
text = models.TextField()
create_date = models.DateTimeField(default=timezone.now)
post_views = models.IntegerField(default=0)
def get_absolute_url(self):
return reverse("TheApp:post_detail", kwargs={'pk':self.pk})
def __str__(self):
return self.title
Вид:
class PostDetailView(LoginRequiredMixin, DetailView):
model = Post
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
obj = self.get_object()
obj.post_views = obj.post_views + 1
obj.save()
return context
Шаблон:
{% extends "TheApp/base.html" %}
{% block body_block %}
<div class="container" style="margin-top:50px; margin-bottom:20px;">
<h1>{{post.title}}</h1>
<div style="margin-bottom:20px;">{{ post.create_date }}</div>
<p>{{ post.text }}</p>
<p>Created By: {{ post.author }}</p>
{% if user.is_authenticated %}
<a class='btn btn-primary btn-comment' href="{% url 'TheApp:add_comment_to_post' pk=post.pk %}">Add Comment</a>
{% if user == post.author %}
<a class='btn btn-primary' href="{% url 'TheApp:post_edit' pk=post.pk %}">EDIT</a>
<a class='btn btn-primary' href="{% url 'TheApp:post_remove' pk=post.pk %}">DELETE</a>
{% endif %}
{% endif %}
</div>
<div class="container" style="margin-bottom:150px;">
{% for comment in post.comments.all %}
<div class="Misgeret" style= "margin-bottom:20px;">
<br>
{{comment.create_date}}
<p>{{comment.text|linebreaks}}</p>
<p>Posted by: {{comment.author}}</p>
{% if user.is_authenticated %}
{% if user.username == comment.author or user == post.author %}
<a style="margin-bottom:20px;" class='btn btn-primary' href="{% url 'TheApp:comment_remove' pk=comment.pk %}">Remove</a>
{% endif %}
</div>
{% endif %}
{% empty %}
<p>No Comments</p>
{% endfor %}
</div>
{% endblock %}