2015-10-22 112 views
0

我有一個django格式的字段需要一個整數。 該字段中的默認值是' - '。 這意味着當用戶忽略該字段時,將返回表單字段錯誤。令人討厭的消息有一個惱人的'你'在它。Django字段錯誤消息

我該如何擺脫U?

的HTML

<div class="col-sm-1"> 
    {% with childForm.age as field %} 
     <div class="form-group{% if field.errors %} has-error{% endif %}" id="children-age"> 
      {{ field }} 
      {% if field.errors %}<p class="help-block">{% for error in field.errors %}{{ error }}{% endfor %}</p>{% endif %} 
     </div> 
    {% endwith %} 
</div> 

錯誤

screenshot of the error

forms.py

class TravelGeneralEnquiryForm(forms.ModelForm): 
children = forms.ChoiceField(choices=(('','-'),) + tuple(((str(x), x) for x in range(0, 11))), required=True) 
adults = forms.ChoiceField(choices=(('','-'),) + tuple(((str(x), x) for x in range(1, 11))), required=True) 
pets = forms.ChoiceField(choices=((str(x), x) for x in range(0, 11)), required=True, initial=1) 
budget = forms.ChoiceField(choices=BUDGET,required=False) 
interest_destination = forms.MultipleChoiceField(required=False, 
              widget=forms.CheckboxSelectMultiple, 
              choices=INTEREST_DESTINATION_CHOICES) 
interest_accommodation = forms.MultipleChoiceField(required=False, 
              widget=forms.CheckboxSelectMultiple, 
              choices=INTEREST_ACCOMMODATION_CHOICES) 
contact_preference = forms.ChoiceField(required=False, 
              widget=forms.RadioSelect, 
              choices=CONTACT_PREFERENCE) 
inspire_hours = forms.ChoiceField(choices=INSPIRE_HOURS, required=False) 

def __init__(self, *args, **kwargs): 
    super(TravelGeneralEnquiryForm, self).__init__(*args, **kwargs) 
    self.fields['name_title'].widget.attrs = {'class': 'form-control',} 
    self.fields['name_title'].label = 'Title*' 
    self.fields['first_name'].widget.attrs = {'class': 'form-control',} 
    self.fields['first_name'].label = 'First name*' 
    self.fields['last_name'].widget.attrs = {'class': 'form-control',} 
    self.fields['last_name'].label = 'Last name*' 
    self.fields['email'].widget.attrs = {'class': 'form-control',} 
    self.fields['email'].label = 'Email address*' 
    self.fields['telephone'].widget.attrs = {'class': 'form-control',} 
    self.fields['telephone'].label = 'Telephone number*' 
    self.fields['check_in_date'].widget.attrs = {'class': 'form-control datepicker', 'data-date-format': 'dd/mm/yyyy', 'placeholder': 'dd/mm/yyyy', 'autocomplete': 'off',} 
    self.fields['check_in_date'].widget.format = '%d/%m/%Y' 
    self.fields['check_in_date'].input_formats = ['%d/%m/%Y'] 
    self.fields['check_in_date'].label = 'Check in date*' 
    self.fields['check_out_date'].widget.attrs = {'class': 'form-control datepicker', 'data-date-format': 'dd/mm/yyyy', 'placeholder': 'dd/mm/yyyy', 'autocomplete': 'off',} 
    self.fields['check_out_date'].widget.format = '%d/%m/%Y' 
    self.fields['check_out_date'].input_formats = ['%d/%m/%Y'] 
    self.fields['check_out_date'].label = 'Check out date*' 
    self.fields['budget'].widget.attrs = {'class': 'form-control'} 
    self.fields['info'].widget.attrs = {'class': 'form-control', 'rows': '3', 'placeholder': 'Pet breed/size/temperament/food allergies/disabled access'} 
    self.fields['adults'].widget.attrs = {'class': 'form-control'} 
    self.fields['adults'].label = 'Number of adults*' 
    self.fields['children'].widget.attrs = {'class': 'form-control', 'initial': '---'} 
    self.fields['children'].label = 'Number of children*' 
    self.fields['pets'].widget.attrs = {'class': 'form-control'} 
    self.fields['pets'].label = 'Number of pets*' 
    self.fields['rooms'].widget.attrs = {'class': 'form-control'} 
    self.fields['rooms'].label = 'Number of rooms*' 
    self.fields['contact_preference'].label = 'Prefered method of contact' 
    self.fields['inspire_postcode'].label = 'Your Postcode' 
    self.fields['inspire_postcode'].widget.attrs = {'class': 'form-control', 'placeholder': 'N1 4SZ'} 
    self.fields['inspire_hours'].label = 'How far would you like to travel?' 
    self.fields['inspire_hours'].widget.attrs = {'class': 'form-control'} 
    self.fields['inspire_details'].widget.attrs = {'class': 'form-control', 'rows': '2', 'cols':50 , 'placeholder': 'The more information you give us, the better we are able to help you!'} 
    self.fields['inspire_details'].label = 'Additional Information' 


class Meta: 
    model = TravelGeneralEnquiry 
    exclude = ('enquiry_source',) 

class TravelGeneralEnquiryChildForm(forms.ModelForm): 
    age = forms.ChoiceField(choices=(('-','-'),) + tuple(((str(x), x) for x in range(0, 18)))) 

def __init__(self, *args, **kwargs): 
    super(TravelGeneralEnquiryChildForm, self).__init__(*args, **kwargs) 
    self.fields['age'].widget.attrs = {'class': 'form-control'} 

class Meta: 
    model = TravelGeneralEnquiryChild 
    fields = ('age',) 


class TravelGeneralEnquiryChild(models.Model): 
    general_enquiry = models.ForeignKey(TravelGeneralEnquiry, blank=False, null=False, related_name="general_enquiry_children") 
    age = models.CharField(max_length=2, default=0, null=False, blank=False, choices=((str(x), x) for x in range(0, 18))) 
+0

值得一提的是,'u'不是隨機的,它表示一個unicode字符串類型。 – Joseph

+0

是的,我意識到這一點。歡呼雖然.. –

+0

你是如何構造錯誤信息? Django 1.8中的默認錯誤消息是'選擇一個有效的選擇。 - 不是可用選項之一。'',它沒有'u'''前綴。 – Alasdair

回答

1

我不知道爲什麼錯誤信息有u''前綴。我建議您將的值更改爲空字符串''

class TravelGeneralEnquiryChildForm(forms.ModelForm): 
    age = forms.ChoiceField(choices=(('','-'),) + tuple(((str(x), x) for x in range(0, 18)))) 

這樣你會得到錯誤信息This field is required.而不是無效的選擇錯誤消息。