我正在尝试在 django2.2 中创建一个多步骤表单。显然,原生 FormWizard 在以前的 django 版本中已被弃用,所以我遇到的唯一解决方案是django-formtools。我有两个模型为 FormWizard 提供必填字段。我已经能够成功地从表单中制作用户输入字典。我打算将此数据保存到其中一个模型中。但是,该模型需要一个 user.id 字段,因为它是 CustomUser 对象的外键,因此不能为空。我相信有一种方法可以将此 user.id 添加到数据字典中,然后将整个字典保存为我的目标模型中的实例。这是我一直在挣扎的地方。
我尝试调用 user=request.user 但出现错误,提示“未定义请求”,因为这是基于类的视图(我想这就是原因)。
我的模特
class Category(models.Model):
name= models.CharField(blank = True, max_length=500)
def __str__(self):
return self.name
class ModelsAd(models.Model):
title = models.CharField(max_length=500)
category = models.ForeignKey(Category,default=1, on_delete=models.CASCADE)
location = models.ForeignKey(Location,default=1, blank=True, on_delete=models.CASCADE)
description = models.CharField(max_length=1000)
price = models.PositiveIntegerField(default=1000)
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
created_at = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
我的表格
all_categories = Category.objects.all()
class CategoryChoiceForm(forms.Form):
category = forms.ModelChoiceField(queryset = all_categories, to_field_name = "name", empty_label=None)
class ModelsAdForm(ModelForm):
class Meta:
model = ModelsAd
fields = ('title','location', 'description', 'price')
我的观点
from formtools.wizard.views import SessionWizardView
class FormWizardView(SessionWizardView):
template_name = "post_ad.html"
form_list = [CategoryChoiceForm, ModelsAdForm]
def done(self, form_list, **kwargs):
form_data = [form.cleaned_data for form in form_list]
data_dict={}
for item in form_data:
data_dict.update(item)
add_data=ModelsAd(**data_dict)
# add_data.save()
test=ModelsAd.objects.all()
print(test)
return render(self.request, 'index.html',locals())
我需要将 user.id 传递给 FormWizardView 以便我可以将其附加到 data_dict 以便我可以成功地将 dict 作为实例保存在我的数据库中。到目前为止,我在兜圈子。任何帮助将不胜感激。有人请至少指出我正确的方向