我被困在試圖保存從另一個模型的外殼作爲外鍵獲取的模型實例。保存一個django對象從一個表格獲取另一個模型實例作爲外鍵
模型
class Customer(models.Model):
owner = models.ForeignKey(User)
custname = models.CharField()
class Appointment(models.Model):
user = models.ForeignKey(User)
start = models.DateTimeField()
end = models.DateTimeField()
customer = models.ForeignKey(Customer)
形式
class AppointmentForm(forms.Form):
basedate = forms.DateField()
start = forms.TimeField(widget=forms.Select())
end = forms.IntegerField(widget=forms.Select())
customer = forms.ModelMultipleChoiceField(queryset=Customer.objects.all())
,我是不是能夠得到一個通用的FormView工作的方法:
def form_valid(self, form):
if form.is_valid():
appointment = Appointment()
appointment.user = self.request.user
basedate = form.cleaned_data['basedate']
start = form.cleaned_data['start']
duration = form.cleaned_data['end']
appointment.start = datetime.datetime.combine(basedate, start)
appointment.end = appointment.start + datetime.timedelta(minutes=duration)
appointment.save()
return super(AppointmentCreate, self).form_valid(form)
,我應該在最後添加什麼方法從窗體中讀取外鍵客戶,並將其傳遞給約會?是否有任何過濾方式,以便在表單中只顯示屬於request.user的用戶?
非常感謝您的幫助。
現在我可以保存約會的實例,謝謝。但有兩個問題:在表單中,不允許使用request.user,因此我無法過濾當前用戶的客戶。 ¿是否有其他方法可以做到這一點?而對於ModelChoiceField,doc應該避免超過100種不同的選擇。這裏最好的方法是什麼? – user1971044
這是什麼阻止你使用request.user?如果您收到錯誤,請發佈。至於ModelChoiceField - 它是'選擇'小部件,不建議超過100種不同的選擇,而不是字段本身。選擇小部件是您在表單HTML頁面上使用的選項。有各種各樣的方法 - 修改選擇小部件,使用jQuery選擇小部件等。https://docs.djangoproject.com/en/dev/ref/forms/widgets/ –
瞭解選擇小部件。關於表單問題,當您嘗試您的建議時,我會得到:_Exception值:\t名稱'請求'未定義_。我認爲這樣做的方式可能會覆蓋表單類的'_init_'方法,但我無法使其工作。再次,我感謝幫助。 – user1971044