簡體   English   中英

如何在updateview中將參數傳遞給表單?

[英]How to pass argument to form in updateview?

我想在我的 model 事件中使用 UpdateView。 這個 model 有這個字段:

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”必須是“用戶”實例。

我不明白,因為如果在我的視圖中刪除“get_form_kwargs”並在我的表單中刪除“def init ”,則傳遞的值是相同的(員工的 pk)。 它以這種方式工作。 但問題是所有員工都是可選的,並且用戶名不是名字和姓氏。

這是因為您的事件 model 上的employee ForeignKey指向User model,但您正在使用Particulier model 數據填充employee字段的選擇字段。

將外鍵更改為指向Particulier model,或將Users傳遞給表單 kwargs

抱歉,我忘記在此頁面的代碼中修復此錯誤。

但是我的第一條評論中有錯誤,用用戶 model 數據填充選擇字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM