[英]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.