Передача информации из другой Django модели Createview - Листинг и обзоры

У меня есть два приложения Django, одно с объявлениями, а другое для аккаунтов. В приложении для аккаунтов у меня есть модель отзывов, прикрепленная к аккаунту, и я хочу, чтобы у пользователей была возможность создавать отзывы для объявления, которые в конечном итоге прикрепляются к аккаунту, а не к объявлению. Таким образом, все отзывы об объявлениях под конкретным аккаунтом прикрепляются к самому аккаунту, а не обязательно к объявлению.

Частью модели отзывов являются поля listing и listing_author, таким образом, я могу фильтровать по этим полям в дальнейшем. На странице подробностей объявления я хочу, чтобы пользователи могли нажать "Создать отзыв" и создать отзыв для объявления, которое находится под профилем. Я столкнулся с проблемой, когда не могу передать user_id и listing_id в CBV CreateView, поскольку информация со страницы listing_detail (включая эти два поля) не передается

Accounts Models.py

class ProfileReviews(models.Model):

    user = models.ForeignKey(
        get_user_model(),
        on_delete = models.CASCADE,
        related_name = 'reviews'
    )
    listing_item_id = models.UUIDField()
    review = models.TextField(max_length = 1000)
    rating = models.IntegerField()
    reviewer = models.ForeignKey(
        get_user_model(),
        on_delete=models.CASCADE,
    )

    def __str__(self):
        return self.review

Listings Model.py

class Listing(models.Model):

    item_id = models.UUIDField(
        primary_key=True,
        default=uuid.uuid4,
        editable=False
    )
    lender = models.ForeignKey(
        get_user_model(),
        on_delete = models.CASCADE,
        related_name = 'lender'
    )
    item_name = models.CharField(max_length=200)

    def __str__(self):
        return self.item_name

    def get_absolute_url(self):
        return reverse('listing_detail', args=[str(self.item_id)])

Listings views.py

class CreateListingReview(CreateView):

    model = ProfileReviews
    template_name = 'listings/create_review.html'
    fields = ['review', 'rating']
    context_object_name = 'create_listing_review'
    success_url = reverse_lazy('listing_detail')

    def form_valid(self, form):
        form.instance.reviewer = self.request.user
        form.instance.user = self.request.POST.get('lender')
        form.instance.listing_item_id = self.request.POST.get('item_id')
        return super().form_valid(form)

Я думаю, что мне нужно передать пользователя и listing_item_id из поля lender и item_id в модели Listing, используя form_valid, но я не уверен, как передать конкретную информацию из конкретного объявления.

Вернуться на верх