Django ChoiceField在编辑后保存无值?

时间:2017-06-01 06:27:22

标签: python django django-forms django-templates django-views

我的模型如下,

f(1)

我为该模型设置了如下模型,

gender = (
    ('Male', 'Male'),
    ('Female', 'Female'),
    )

class UserProfile(models.Model):
    profile_id = models.CharField(max_length=60, blank=True,default='',)
    gender = models.CharField(max_length=60, blank=True, default='',
                              choices=gender,verbose_name="gender")

用于编辑表单的视图,

 class UserProfileForm(forms.ModelForm):

def __init__(self, *args, **kargs):
    super(UserProfileForm, self).__init__(*args, **kargs)
   class Meta:
       model = UserProfile
       fields = '__all__'

用于编辑userprofile表单的模板,

  def userprofile_edit(request, pk):
       userprofile = UserProfile.objects.get(pk=pk)
       form = UserProfileForm(request.POST or None,instance=userprofile)

       if request.method == "POST":
          form = UserProfileForm(request.POST or None,instance=userprofile)
         if form.is_valid():
            post = form.save(commit=False)
            post.save()
            return redirect('userprofile')
         else:
           form = UserProfileForm(instance=userprofile)
      else:
          form = UserProfileForm(request.POST or None,instance=userprofile)
      return render(request,'userprofiles/user_edit.html', {'form':form,'userprofile': userprofile})

问题仅在于编辑userprofile表单时,当我单击此表单的提交按钮时,它会引发"此字段是必需的"。当我单击选择域并选择一个选项时,它可以工作。但如果我没有选择一个选项,它会保存一个None.I想知道如何将值传递给selectfield。请帮帮忙?

2 个答案:

答案 0 :(得分:2)

您已将性别默认声明为""空字符串。因此,如果用户没有选择任何...

,请在表单中放入空字符串
<option selected="selected" value=""></option>

答案 1 :(得分:0)

由于您使用的是模型表单,因此无需为表单编写HTML,无论如何您都要从视图中返回表单。您可以将其写为:

<div>
 <form action="your url" method="POST">
 {% csrf_token %}
  {{ form.as_p }}
<butoon type="submit">Update</button>
</form>

选择字段作为空白的唯一可能性是它可能未被选中。