Как получить доступ к данным из определения наследования нескольких таблиц?
Прямо из Django Docs....
from django.db import models
class Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
class Restaurant(Place):
serves_hot_dogs = models.BooleanField(default=False)
serves_pizza = models.BooleanField(default=False)
Я играл с этим весь день. Хорошая новость в том, что я могу заставить его работать, пока вы не называете свое приложение Abstract...
Я вижу данные в своей базе данных, поэтому знаю, что она работает... но я не могу понять, как получить доступ к данным. В прошлом я использовал представления на основе классов... это мой первый опыт использования многотабличной структуры наследования за пределами представлений на основе классов.
Я пытался сделать...
def get_absolute_url(self):
return reverse("App:create_restaurant_detail",kwargs={'pk':self.object.place_ptr_id})
Вот мои ссылки...
path("create_restaurant",views.CreateRestaurantView.as_view(), name='create_restaurant'),
path("create_restaurant_detail/1bad5cba-a087-4f0a-9c3b-65ac096c3e42/<pk>/",views.CreateRestaurantDetailView.as_view(), name='create_restaurant_detail'),
И мои взгляды....
class CreateRestaurantView(LoginRequiredMixin,CreateView):
model = Place
form_class = CreateRestaurantForm
template_name = 'create_restaurant.html'
def form_valid(self, form):
instance = form.save()
return super(CreateRestaurantView, self).form_valid(form)
def get_success_url(self):
return redirect('Cute:create_restaurant_detail', kwargs={'pk':self.object.place_ptr_id})
class CreateRestaurantDetailView(LoginRequiredMixin,DetailView):
model = Restaurant
context_object_name = 'place_detail'
template_name = 'create_place_detail.html'
Но поиск url продолжает говорить, что он не найден. Я пытаюсь понять, как получить доступ к данным в таблице. Заранее спасибо за любые мысли и помощь.
class CreateRestaurantView(LoginRequiredMixin,CreateView):
model = Restaurant
form_class = CreateRestaurantForm
template_name = 'create_restaurant.html'
def form_valid(self, form):
instance = form.save()
return JsonResponse({ 'id': instance.pk, 'success_url': self.get_success_url() })
def post(self, request, *args, **kwargs):
if "cancel" in request.POST:
return HttpResponseRedirect(reverse('Main:main'))
else:
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
restaurant_instance = form.save()
self.object = restaurant_instance
return self.form_valid(form)
def get_success_url(self):
return reverse('Newapp:create_restaurant_detail', kwargs={ 'pk' : self.object.place_ptr_id })
Мой URL...
path("create_restaurant_detail/<int:pk>/",views.CreateRestaurantDetailView.as_view(), name='create_restaurant_detail'),
Я неправильно понял CreateView. Этот код работает на данный момент, но я не уверен, что JsonResponse - лучший ответ для form_valid. Я не смог найти подходящую альтернативу, но моя первоначальная проблема решена. Спасибо Iain за помощь в решении проблемы.