Получение контекстных данных об атрибуте в модели в Django DetailView
Я пытаюсь отфильтровать все отзывы, которые соответствуют объявлениям, созданным определенным пользователем. Цель состоит в том, чтобы поместить все отзывы, полученные кем-либо на его объявлениях, на страницу профиля. Я могу использовать get_context_data для извлечения отзывов из объявлений, но я хочу фильтровать по отношениям в самом объявлении.
Views.py
class ProfileDetailView(DetailView):
model = Profile
template_name = 'account/profile_detail.html'
context_object_name = 'profile_detail'
def get_object(self):
return self.request.user.profile
def get_context_data(self, **kwargs):
context = super(ProfileDetailView, self).get_context_data(**kwargs)
context['reviews'] = RentalListingReviews.objects.filter(RentalListing.lender = self.request.user)
return context
Models.py
class RentalListing(models.Model):
item_id = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False
)
lender = models.ForeignKey(
get_user_model(),
on_delete = models.CASCADE,
)
item_name = models.CharField(max_length=200)
def __str__(self):
return self.item_name
def get_absolute_url(self):
return reverse('rental_listing_detail', args=[str(self.item_id)])
class RentalListingReviews(models.Model):
listing = models.ForeignKey(
RentalListing,
on_delete = models.PROTECT,
related_name = 'listing_reviews',
)
review = models.TextField(max_length = 1000)
author = models.ForeignKey(
get_user_model(),
on_delete = models.PROTECT,
)
def __str__(self):
return self.review
def get_absolute_url(self):
return reverse('rental_listing_detail', args=[str(self.listing.item_id)])
Вы пытаетесь присвоить поле RentalListing в вызове функции.
context['reviews'] = RentalListingReviews.objects.filter(RentalListing.lender = self.request.user)
Должно быть ->
context['reviews'] = RentalListingReviews.objects.filter(lender = self.request.user)
Должно быть:
RentalListingReviews.objects.filter(listing__lender = self.request.user)