【发布时间】:2020-10-07 16:44:49
【问题描述】:
我有一个具有许多属性的 ModelForm - 在 CreateView form_valid 方法中,我试图将用户表单输入保存为会话数据(如果他们访问,我会在 get_initial 方法中检查再次形成)
模型形式:
class OrgForm(forms.ModelForm):
"""Form definition for a Org."""
class Meta:
"""Meta definition for OrgForm."""
model = Org
fields = (
"full_name",
"short_name",
"feature",
"state",
"email",
)
查看:
class OrgCreateView(CreateView):
"CreateView for OrgForm"
model = Org
form_class = OrgForm
success_url = "/home/"
def form_valid(self, form):
response = super().form_valid(form)
# Set the form data to session variables
responses = {}
for k, v in form.cleaned_data.items():
responses[k] = v
self.request.session["org_form_data"] = responses
return super().form_valid(form)
def get_initial(self):
initial = super(OrgCreateView, self).get_initial()
# Check for any existing session data
# This is present if they had filled this out
# and then came back again later to fill out again
if "org_form_data" in self.request.session:
# They have data - loop through and fill it out
for key, value in self.request.session["org_form_data"]:
initial[key] = value
return initial
型号:
class Org(models.Model):
"""Model definition for Org."""
full_name = models.CharField(max_length=150)
short_name = models.CharField(max_length=25, blank=True, null=True)
state = models.CharField(max_length=50)
is_active = models.BooleanField(default=False)
feature = models.ForeignKey(Feature, on_delete=models.PROTECT)
created_at = models.DateTimeField(auto_now=False, auto_now_add=True)
last_updated = models.DateTimeField(auto_now=True, auto_now_add=False)
email = models.EmailField()
我有一个具有外键的属性 - 所以当我保存表单时出现错误:
Object of type Feature is not JSON serializable
我不确定如何最好地解决该错误 - 或者即使这是解决问题的正确方法。
感谢任何帮助!
【问题讨论】:
-
解决了这个问题吗?面临类似的问题。
-
否定。发布此消息后不久,不得不前往另一个项目。如果我回到它并找出答案,我会发布。否则,它仍然是开放的。
标签: python django django-models django-forms