Как передать аргумент для формы в updateview? - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу использовать UpdateView в моей модели Event. У этой модели было это поле:

employee = models.ForeignKey(User, on_delete=models.CASCADE, related_name='event_employee')

Мой взгляд:

class UpdateEvent(UpdateView):
    model = Event
    template_name = 'dashboard/pro_update_event.html'
    form_class = UpdateEventForm
    other_variable = None

    def get_form_kwargs(self):
        kwargs = super(UpdateEvent, self).get_form_kwargs()
        names_clients = User.objects.filter(professionnels=self.request.user)
        kwargs.update({'names_clients': names_clients})
        return kwargs

    def get_success_url(self, *args, **kwargs):
        return reverse_lazy('pro_details_event', kwargs={'pk': self.object.pk})

Моя форма:

class UpdateEventForm(forms.ModelForm):
    """
    edit an event
    """
    class Meta():
        model = Event
        fields = ('employee', 'date_start', 'date_end')

    def __init__(self, names_clients, *args, **kwargs):
        super(UpdateEventForm, self).__init__(*args, **kwargs)
        self.fields['employee'] = forms.ChoiceField(choices=tuple([(client.pk,client.last_name.capitalize()+" "+client.first_name.capitalize()) for client in names_clients]))

Кажется, что работа, виджет "выбрать" содержит правильные значения. пример: <option value="2">Dupond Jean</option>

Но когда я отправляю форму: Невозможно назначить «2»: «Event.employee» должен быть экземпляром «User».

Я не понимаю потому что, если удалить "get_form_kwargs" в моем представлении и "def init " в моей форме, переданное значение будет тем же самым (pk сотрудника). Это работает с этим способом. Но проблема в том, что все сотрудники выбираются, а имя пользователя отображается не по имени, а по фамилии.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Извините, я забыл исправить эту ошибку в коде на этой странице.

Но у меня есть ошибка в моем 1-м комментарии, при заполнении поля выбора данными модели пользователя.

0 голосов
/ 16 апреля 2020

Это потому, что employee ForeignKey в модели события указывает на модель User, но вы заполняете поле выбора для поля employee данными модели Particulier.

Либо измените внешний ключ, чтобы он указывал на модель Particulier, либо передайте Users форме kwargs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...