如何在updateview中将参数传递给表单?

时间:2020-04-16 09:27:52

标签: python django

我想在模型事件中使用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)。它是通过这种方式工作的。 但是问题是所有雇员都是可以选择的,并且用户名不显示名字和姓氏。

2 个答案:

答案 0 :(得分:0)

这是因为您的事件模型上的employee ForeignKey指向User模型,但是您正在用{{1 }}模型数据。

要么更改外键以指向employee模型,要么将Particulier传递给kwargs形式

答案 1 :(得分:0)

对不起,我忘记修复此页代码中的错误。

但是我的第一条评论中有错误,用用户模型数据填充选择字段。