получить последний объект из базы данных независимо от пользователя в django - PullRequest
0 голосов
/ 11 апреля 2020

Я учусь python и django, и я кодирую проект, аналогичный IMDB.
Я использую python 3.8.2 64 бит и django 3
Я хочу отобразить последний отзыв mov ie получен независимо от того, кто его написал.
Теперь он показывает собственный последний отзыв пользователя, и после выхода из системы отзыв остается без отображения того пользователя, который его написал. Я попытался очистить кеш и историю, не помогло. это модель:

from django.db import models
from django.contrib.auth.models import User

class Movie(models.Model):
    movie_title = models.CharField(max_length=250)
    movie_poster = models.ImageField(default='default.png', blank=True)
    movie_short_description = models.TextField()
    director = models.CharField(max_length=250)
    actor1 = models.CharField(max_length=250)
    actor2 = models.CharField(max_length=250)
    actor3 = models.CharField(max_length=250)
    actor4 = models.CharField(max_length=250)
    year = models.IntegerField()

    def __str__(self):
        return self.movie_title + ' - ' + str(self.year)

class Review(models.Model):
    movie = models.ForeignKey(Movie, on_delete=models.CASCADE)
    user = models.ForeignKey(User, default = None, on_delete=models.DO_NOTHING)
    score = models.IntegerField()
    review_title = models.CharField(max_length=250, default="")
    movie_review = models.TextField()
    date = models.DateTimeField(auto_now_add=True)

    class Meta:
        get_latest_by = 'date'

    def __str__(self):
        return self.review_title

views.py

def movie_detail(request, pk):
    try:
        movie  = Movie.objects.get(pk=pk)
        review = Review.objects.all().latest()
    except Exception as e:
        print(e)
    return render (request, 'movies/movie_detail.html', {'movie': movie, 'review': review})

html код:

                </table>
            </p>
            <p>User Reviews</p>
            <h3>Score: {{review.score}}  {{review.review_title}}</h3>
            <h6>{{review.date}}, by {{ user.get_username }}</h6>
            <p>{{review.movie_review}}</p>
            <a href="{% url 'add_review' pk=movie.pk %}">Review this title</a>
        </div>
    </div>
{% endblock %}

1 Ответ

1 голос
/ 11 апреля 2020

Я бы создал свойство на Movie, которое даст вам все отзывы, а затем получит последнюю Review из этого набора запросов. Вот код:

# models.py
class Movie(models.Model):
    # your other code

    @property
    def reviews(self) -> QuerySet:
        return self.review_set.all()


# views.py
def movie_detail(request, pk):
    movie = get_object_or_404(Movie, pk=pk)
    latest_review = movie.reviews.latest()
    # return

Ps: я бы переименовал movie_title, movie_poster и movie_short_description в title, poster и short_description. Очевидно, что title на Movie - это название фильма. Я также настоятельно рекомендую заменить 4 actor s на одну модель с ManyToMany -отношением (но я думаю, что вы прочтете об этом в документации позже).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...