Как и в сообщении об ошибке, DetailView
[Django-doc] не реализует обработчик для запросов POST.Поэтому, если вы сделаете POST-запрос к обработчику, он выдаст ошибку HTTP 405. Метод не разрешен.
Таким образом, нам потребуется реализовать обработчик для POST-запроса самостоятельно.Хорошей новостью является то, что в ModelFormMixin
[Django-doc] уже реализована большая функциональность.Таким образом, мы можем реализовать это следующим образом:
class PropertyDetailView(<b>ModelFormMixin</b>, DetailView):
model = PropertyListing
context_object_name = 'name'
template_name = 'core/property-detail.html'
<b>form_class = BookingForm</b>
<b>success_url</b> = ...
def get_context_data(self, *args, **kwargs):
context = super(PropertyDetailView, self).get_context_data(**kwargs)
context['property_details'] = PropertyListing.objects.filter(pk=self.kwargs.get('pk'))
return context
def <b>post</b>(self, *args, **kwargs):
self.object = None
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
Таким образом, вам не нужно добавлять Form
к данным контекста (ModelFormMixin
сделает это), а также вам не нужно обрабатывать форму самостоятельно.,Однако вам нужно будет указать success_url
[Django-doc] или переопределить метод form_valid
[Django-doc] .
При этом может быть лучше использовать CreateView
[Django-doc] или UpdateView
[Django-doc] , и просто примените некоторые изменения кода, чтобы добавить в него детали своих объектов.