Skip to main content
 首页 » 编程设计

python之Django ChoiceField 在编辑后保存 None 值

2024年10月01日38lovecherry

我有一个模型如下,

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__' 

和用于编辑表单的 View ,

  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}) 

以及用于编辑用户个人资料表单的模板,

    <div class="col-md-3"> 
       <div class="form-group"> 
             <label>Gender <star>*</star></label> 
             <select name="gender" required class="selectpicker" value="{{ userprofile.gender }}"  data-title="{{ userprofile.gender }}" data-style="btn-default btn-block" data-menu-style="dropdown-blue"> 
{% for Male,Female in form.fields.gender.choices %} 
   <option value="{{ Male }}"{% if form.fields.gender.value == Male %} selected{% endif %}>{{ Female }}</option> 
{% endfor %} 
</select> 

问题仅在编辑 userprofile 表单时出现,当我单击此表单的提交按钮时,它会出现“此字段为必填项”。当我单击选择字段并选择一个选项时,它起作用了。但如果我没有选择一个选项,它会保存一个 None。我想知道如何将值传递给 selectfield。请帮忙?

请您参考如下方法:

您已将默认性别声明为 "" 空字符串。因此,如果用户未选择任何内容,请在您的表单中输入空字符串...

<option selected="selected" value=""></option>