使用外键选择另一个模型的模型的特定实例

时间:2020-10-17 07:40:44

标签: python django django-models django-views django-templates

我有这些型号

class Review(models.Model):
    # SET_NULL ensures that when a company is deleted, their reviews remains
    company = models.ForeignKey(Company, on_delete=models.CASCADE) 
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    # SET_NULL ensures that when a user is deleted, their reviews get deleted too
    review_text = models.TextField(max_length=500, verbose_name='Your Review: (Maximum of 200 Words)')
    rating = Int_max.IntegerRangeField(min_value=1, max_value=5)
    date_added = models.DateField('Review Date', auto_now_add=True)

    def __str__(self):
        return self.review_text

class Response(models.Model):
    user = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
    review = models.ForeignKey(Review, on_delete=models.CASCADE)
    response = models.TextField(max_length=200, verbose_name='Your Response')
    date_added = models.DateField('Response Date', auto_now_add=True)

    def __str__(self):
        return self.response

class ResponseReply(models.Model):
    user = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
    response = models.ForeignKey(Response, on_delete=models.CASCADE)
    review = models.ForeignKey(Review, on_delete=models.CASCADE)
    reply = models.TextField(max_length=200, verbose_name="Your Reply")
    date_added = models.DateField('Response Date', auto_now_add=True)

    def __str__(self):
        return self.reply

如何选择属于特定回复的ResponseReply,该回复也具有特定评论的外键。

我的视图宁愿返回一个列表,而不是评论模型的对象,因为有多个评论。以下是我的看法:

def profile_company(request):
    print(request.user)
    company = get_object_or_404(Company, user=request.user)
    review = get_object_or_404(Review, company=company)
    responses = get_list_or_404(Response, review=review)
    response = get_object_or_404(Response, review=review)
    responses = get_list_or_404(Response, review=review)
    reply = get_object_or_404(Response, response=response)
    company_reviews = company.review_set.all()
    total_reviews = len(company_reviews)
    print(company.average_rating)
    form = ResponseForm()
    if request.method == "POST":
        form = ResponseForm(request.POST or None)
        if form.is_valid:
            data = form.save(commit=False)
            data.user = request.user
            data.review = review
            data.save()
            return redirect('profile_company')
    context = {
        'company': company,
        'company_reviews': company_reviews,
        'total_reviews': total_reviews,
        'form': form,
        'responses': responses,
        'reply': reply,
        

    }
    return render(request, 'companyusers/profile_company.html', context)

问题是当我打电话给response = get_object_or_404(Response, review=review)时,它失败了,因为评论可能不止一次。如何选择属于特定评论的特定回复。为了使我能够选择相关的回复。

非常感谢您!

0 个答案:

没有答案