【发布时间】:2021-12-10 08:30:34
【问题描述】:
我想在我的表单中添加一个多选字段,经过搜索,我终于让它工作了。但是,当我创建一个新用户并尝试填写个人信息表单时,它给了我 PersonalInfo 匹配查询不存在错误。这些是我的代码: 模型.py:
class Field(models.Model):
id = models.AutoField(primary_key=True)
slug = models.CharField(max_length=16, default='default')
title = CharField(max_length=32)
class PersonalInfo(models.Model):
id = models.AutoField(primary_key=True)
isCompleted = models.BooleanField(default=False)
interested_fields = models.ManyToManyField(Field, blank=True)
forms.py:
class InterestedFieldsForm(forms.ModelForm):
interested_fields = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=Field.objects.all(), required=False)
class Meta:
model = PersonalInfo
fields = ['interested_fields']
views.py:
class PersonalView(View):
template_name = 'reg/personal.html'
def get(self, request, *args, **kwargs):
context = {}
context['fields'] = Field.objects.all()
return render(request, self.template_name, context=context)
def post(self, request, *args, **kwargs):
user = request.user
if request.method == 'POST':
form = InterestedFieldsForm(request.POST, instance=PersonalInfo.objects.get(user=user))
if form.is_valid():
profile = form.save(commit=False)
profile.user = request.user
profile.save()
form.save_m2m()
else:
form = InterestedFieldsForm()
return render(request, 'reg/done.html', context={'form': form})
我知道问题出在视图中: form = InterestedFieldsForm(request.POST, instance=PersonalInfo.objects.get(user=user)) 当我删除实例时,表单会保存为用户的个人信息,但不会替换以前的表单,它会创建一个新表单。然后我再次放回实例并尝试保存表单,一切正常。是什么导致了这个问题?
【问题讨论】:
-
您的用户没有相关的
PersonalInfo记录。 -
我知道,我想使用此表单为其创建一个。我该怎么办
-
如果
get_or_create不存在则创建一个 -instance=PersonalInfo.objects.get_or_create(user=user)[0] -
在哪里以及如何?你能详细说明一下吗?我是新手
标签: django