Добавление функции комментариев в Django DetailView? - PullRequest
0 голосов
/ 09 июля 2020

Какой самый простой лог c я могу добавить в 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 голосов
/ 09 июля 2020

на самом деле я дал вам лучший подход для этого, но если вы хотите сделать все logi c и функции на 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

...