Как получить доступ к данным из определения наследования нескольких таблиц?

Прямо из 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 за помощь в решении проблемы.

Вернуться на верх