Установка экземпляра для форм в updateview

У меня есть UpdateView с несколькими формами, и я пытаюсь понять, как установить экземпляр для другой формы, потому что первая форма работает нормально, но вторая форма всегда пуста, и я не могу понять, как установить экземпляр для эта модель.

class ProfileUpdateView(UpdateView):
    # model = User
    queryset = User.objects.all()
    form_class = UserForm
    second_form_class = ClientForm

    template_name = 'accounts/update.html'



    def get_object(self):
        user = get_object_or_404(User , username__iexact=self.kwargs.get('username'))
        return user


    def get_context_data(self, **kwargs):
        user = self.object
        profile = Client.objects.get(id = user.clients.id)
        context = super(ProfileUpdateView, self).get_context_data(**kwargs)

        if user.is_client and 'ClientForm' not in context:
            context['client_form'] = self.second_form_class(self.request.GET, instance=profile )
    return context

модели

class User(AbstractUser):
    gender_choice  =(
        ('Male','Male'),
        ('Female','Female'),
        )
    is_artisan     = models.BooleanField('artisan status', default=False)
    is_client      = models.BooleanField('client status', default=False)
    avatar         = models.ImageField(null=True ,blank=True)
    birth_day      = models.DateField(null=True,blank=True)
    birth_location = models.CharField(max_length=30, null=True ,blank=True)
    adresse        = models.CharField(max_length=30, null=True ,blank=True)
    gender         = models.CharField(max_length=6,choices=gender_choice,)
    phone          = models.CharField(max_length=10 ,null=True ,blank=True)

class Client(models.Model):
    client_choice = (
        ('erson','person'),
        ('company','company'),
        )
    client_type = models.CharField(max_length=10,choices=client_choice,)
    user        = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, related_name='clients')

формы

class UserForm(forms.ModelForm):

    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email','avatar','adresse','birth_location','birth_day' ,'gender' ,'phone')



class ClientForm(forms.ModelForm):

    class Meta:
        model = Client
        fields = ('client_type',)

теперь вопрос, как / где я могу установить экземпляр для второй формы и где установлен первый экземпляр формы.

0
0
1 063
1

Ответы 1

Это опечатка в get_context_data? Должно быть:

if user.is_client and 'client_form' not in context:
    context['client_form'] = self.second_form_class(self.request.GET, instance=profile)

Первая форма устанавливается в суперклассе UpdateView FormMixin.get_context_data (который, в свою очередь, вызывает FormMixin.get_form ()). Документы для FormMixin

да, это действительно опечатка, спасибо за это. вы имеете в виду, что мне нужно переопределить get_form () и установить другие экземпляры форм?

LeLouch 10.08.2018 16:40

@LeLouch Нет, то, что у вас с исправленной опечаткой, должно работать, я думаю. Я только что упомянул это о FormMixin, чтобы ответить на ваш вопрос о том, где создается первая форма.

BottleZero 10.08.2018 16:44

ну, вторая форма пуста, но экземпляр не работает с другой формой

LeLouch 10.08.2018 16:51

@LeLouch хммм, а как насчет вашей ClientForm?

BottleZero 10.08.2018 18:58

я также добавляю формы

LeLouch 10.08.2018 19:14

@LeLouch Хорошо, последнее, о чем я могу думать, - это шаблон, вы можете его показать?

BottleZero 10.08.2018 19:20

чувак, шаблон не имеет к этому никакого отношения, все работает нормально, просто пусто, на нем нет данных

LeLouch 10.08.2018 19:44

Другие вопросы по теме