Получение pk от выбранного объекта в обобщенном c ListView html для заполнения FK для новой формы (CBV) - PullRequest
1 голос
/ 18 января 2020

Я пытаюсь создать приложение carwa sh, и у меня возникают проблемы с заполнением формы wa sh с помощью pk автомобиля. Я пытался с "get_initial", "get_context_data", "form_valid", , передавая {% url 'имя приложения: urlname' object.pk%} в кнопке html , даже думал о наборах форм. Так что, если вы можете направить этого нуба в порядке (я), я бы с благодарностью оценил его!

, поэтому код упрощен до ...

модель:

class Car(models.Model):
   carplates = models.CharField(max_length=50, unique=True, null=False)
   owner = models.ForeignKey(User, on_delete=models.CASCADE, null=False)

class Wash(models.Model):
   vehicle_to_wash = models.ForeignKey(Car, on_delete=models.CASCADE)
   specific_comment = models.TextField(max_length=500, blank=True, null=True

Форма:

class WashServiceForm(forms.ModelForm):

    class Meta:
        model = Wash
        fields = ['specific_comment', 'vehicle_to_wash']

Просмотров:

class CarList(LoginRequiredMixin, ListView):
    model = Car

    def get_queryset(self):
        return Car.objects.filter(user=self.request.user)

    def get_context_data(self, **kwargs):
        context = super(CarList, self).get_context_data(**kwargs)
        context['car_list'] = context['object_list'].filter(user=self.request.user)
        return context

class WashService(LoginRequiredMixin, CreateView):
    model = Wash
    form_class = WashServiceForm
    template_name = 'service_app/standard_wash_form.html'
    success_url = reverse_lazy('service_app:wash_review')

class WashReview(LoginRequiredMixin, TemplateView):
    model = Wash

URL:

app_name = 'service_app'

urlpatterns = [

    path('car-list/', CarList.as_view(), name='car_list'),
    path('<int:id>/select_wash/', WashService.as_view(), name='wash_service'),
    path('<int:pk>/review', WashReview.as_view(), name='wash_review'),

]

1 Ответ

0 голосов
/ 18 января 2020

Для представлений на основе классов вы можете использовать self.kwargs.get('parameter')

Вам также необходимо добавить get_success_url к вашему class WashService

class WashService(LoginRequiredMixin, CreateView):
    model = Wash
    form_class = WashServiceForm
    template_name = 'service_app/standard_wash_form.html'

    def get_success_url(self):
        return reverse('service_app:wash_review',args=[self.object.id])
...