как получить post.user.username используя self.kwargs.get в Python Django - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть рабочий код ниже в моих учетных записях DetailView, поэтому он показывает рейтинг для каждого пользователя на странице профиля пользователя

просмотр профиля

context['ratings_list'] = Ratings.objects.filter(rating_for__username__iexact=    
    self.kwargs.get('username'))

Iхочу использовать тот же код в моем представлении списка сообщений, где имя пользователя будет post.user.username.

Пример: Ниже показано, как я хочу, чтобы страница списка сообщений выглядела так, что на ней есть несколько сообщений

Post 1 
by Samir Tendulkar. Samir Tendulkar's rating: 8/10 

Post 2 
by John Doe. John Doe's rating: 7/10

просмотр сообщения Могу ли я сохранить тот же вид, что и выше

context['ratings_list'] = Rating.objects.filter(rating_for__username__iexact=
    self.kwargs.get('username')) 

рейтинг модели:

class Rating(models.Model):
    rating_from = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='rating_from')
    rating_for = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='rating_for')

пост модель

class Post(models.Model):
    user = models.ForeignKey(User, related_name='posts')
    title = models.CharField(max_length=250, unique=True)
    message = models.TextField()

   def user_rating(self):
    counter = 0
    total_ratings = 0
    for item in Rating.objects.filter(rating_for=self.user.username):
        counter += 1
        total_ratings += int(item.ratings)
        user_rating = total_ratings / counter
        return user_rating

В моем шаблоне профиля (который на самом деле является шаблоном профиля пользователя)

{% if rating_list %}
     Rating: {% for rating in rating_list|slice:":1" %}
     {{ rating.average_rating }} / 10 {% endfor %}
{% else %}
     User has no rating yet
{% endif %}

Я не уверен, как получить шаблон ListView

1 Ответ

0 голосов
/ 29 сентября 2018

Предполагая, что я понял, о чем вы спрашиваете, может быть проще всего добавить свойство user_rating к вашей модели Post, к которому затем можно получить доступ из шаблона списка Post.Например:

Опубликовать модель

class Post(models.Model):
    user = models.ForeignKey(User, related_name='posts')
    title = models.CharField(max_length=250, unique=True)
    message = models.TextField()

    @property
    def user_rating(self):
        return Rating.objects.get(rating_for=self.user)

Затем в вашем Post шаблоне списка:

{% for post in post_list %}
    <div>
        <span><strong>{{ post.title }}</strong></span><br>
        <span>by {{ post.user.username }}, rating: {{ post.user_rating.average_rating }} / 10</span>
    </div>
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...