我想在模型事件中使用UpdateView。该模型具有以下字段:
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)。它是通过这种方式工作的。 但是问题是所有雇员都是可以选择的,并且用户名不显示名字和姓氏。
答案 0 :(得分:0)
这是因为您的事件模型上的employee
ForeignKey
指向User
模型,但是您正在用{{1 }}模型数据。
要么更改外键以指向employee
模型,要么将Particulier
传递给kwargs形式
答案 1 :(得分:0)
对不起,我忘记修复此页代码中的错误。
但是我的第一条评论中有错误,用用户模型数据填充选择字段。