在Django DetailView中添加评论功能?

时间:2020-07-09 04:13:05

标签: python-3.x django django-models django-views

我可以在class HotelDetailView(DetailView)中添加最简单的逻辑,以便用户可以在特定的酒店详细信息页面上发表评论。而且它也可以捕获用户。

models.py

class Hotel(models.Model):
    name     = models.CharField(max_length=150)
    owner    = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
    image    = models.ImageField(upload_to=upload_location, null=True, blank=True)


class CommentOnHotel(models.Model):
    hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE)
    user  = models.ForeignKey(User, on_delete=models.CASCADE)
    content = models.TextField(max_length=200)
    published = models.DateField(auto_now_add=True)

    def __str__(self):
        return '{} - {}'.format(self.hotel.name, self.user.email)

Forms.py

class CommentOnHotelForm(forms.ModelForm):
    class Meta:
        model = CommentOnHotel
        fields = ['content']

views.py

class HotelDetailView(DetailView):
    model = Hotel
    ........

1 个答案:

答案 0 :(得分:0)

实际上,我为此提供了更好的方法,但是如果您不希望在 DetailView 中使用所有逻辑和功能,请使用以下解决方案,您需要覆盖 POST DetaiView 功能:

class HotelDetailView(DetailView):
     model = Hotel

     def post(self, request, *args, **kwargs):
         # get the hotel object
         hotel = self.get_object()
         #check for validation of form
         form = CommentOnHotelForm({
            "hotel": hotel,
            "user" :request.user
            "comment": request.POST.comment
         })

         if form.is_valid():
            form.save()
            #choose where you want to redirect