2017-06-01 51 views
0

我有一個型號如下,Django ChoiceField在編輯後保存None值嗎?

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

我有一個的ModelForm該型號如下,

class UserProfileForm(forms.ModelForm): 

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

和視圖編輯表單,

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 form,

<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。請幫忙?

+1

我看到性別默認爲空字符串。那爲什麼不通過'' ? –

+0

你在想什麼?如果沒有選擇選項,你想保存什麼? – Exprator

+0

@RajaSimon其工作,謝謝你 –

回答

1

您聲明性別默認爲""空字符串。因此,如果用戶沒有選擇任何內容,在表單中只需輸入空字符串...

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

由於您使用的是模型的形式,沒有必要寫一個HTML的形式,反正你正在返回從view.You形式可以寫爲:

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

選擇字段爲空的唯一可能性是它可能未被選中。