3
我有一個表單嚮導,其中第一步創建了模型A的實例,然後在第二步中使用應包含模型A實例的ForeignKey字段創建模型B.從而,爲了驗證正常工作,我需要在步驟1和步驟2之間保存步驟1表單(可能是commit=False
以防用戶選擇返回步驟?)。執行此操作的最佳方法是什麼?Django表單嚮導 - 步驟2有ForeignKey字段,其實例在步驟1中創建 - 如何驗證?
我有一個表單嚮導,其中第一步創建了模型A的實例,然後在第二步中使用應包含模型A實例的ForeignKey字段創建模型B.從而,爲了驗證正常工作,我需要在步驟1和步驟2之間保存步驟1表單(可能是commit=False
以防用戶選擇返回步驟?)。執行此操作的最佳方法是什麼?Django表單嚮導 - 步驟2有ForeignKey字段,其實例在步驟1中創建 - 如何驗證?
我認爲你可以在重新實現「完成」嚮導方法時管理它,就在你將表單數據保存到數據庫的瞬間(取決於你的最終目標,但是如果你想要一個嚮導你正在尋找的數據保存在嚮導末尾)。想想那些:
因此,您可以爲B做一個表格,而不用擔心「步驟2」中的「A」數據,因爲當您處於嚮導的「最後一步」時數據將會有效。我約的想法是,你可以做一個B所形成只與你正在考慮從B而沒有提及A.例如保存,如果我們有一個BModel下面跟隨數據:
Class B(models.Model):
a = models.ForeignKey('A')
name = models.CharField(max_lenght=50)
您可以創建對於B與形式:
Class BForm(forms.Form):
name = forms.CharField(max_length=50)
終於在「做」的方法,你有一個form_list
與一切形式的有效,你可以這樣做:
def done(self, form_list, **kwargs):
b_data = {}
for form in form_list:
# Getting the A instance
if isinstance(form, AForm):
a_instance = form.save()
# Getting B data
elif isinstance(form, BForm):
b_data = form.cleaned_data
else:
form.save()
b_data.update({'a': a_instance})
BModel.objects.create(**b_data)
return redirect("success_url")