Я хочу использовать 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 сотрудника). Это работает с этим способом. Но проблема в том, что все сотрудники выбираются, а имя пользователя отображается не по имени, а по фамилии.