呈现HTML时删除必需的attr

时间:2019-07-05 03:45:02

标签: django-forms

在呈现HTML时,forms.py中的表单具有必需的attr,而表单中则不需要。 models.py中的字段可以是null execpt主键和外键。我想删除HTML中的必填属性

models.py

class UserInfor(models.Model):
    GENDERS = (
        ('nam', "Nam"),
        ('nữ', "Nữ"),
        ('khác', "Khác")
    )
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    date_of_birth = models.DateField(null=True)
    gender = models.CharField(choices=GENDERS, max_length=10, null=True)
    address = models.CharField(max_length=255, null=True)
    phone_number = models.CharField(max_length=10, null=True)

    def __str__(self):
        return self.user.username

forms.py

class ProfileForm(ModelForm):

    class Meta:
        model = UserInfor
        fields = ['date_of_birth', 'gender', 'address', 'phone_number']
        widgets = {
            'date_of_birth': forms.DateInput(attrs={'placeholder': 'Date of Birth', 'class': 'form-control'}),
            'address': forms.TextInput(attrs={'type': 'text', 'placeholder': 'Address', 'class': 'form-control'}),
            'phone_number': forms.TextInput(attrs={'type': 'text', 'placeholder': 'Phone Number', 'class': 'form-control'}),
        }
        labels = {
            'date_of_birth': "Ngày sinh",
            'gender': "Giới tính",
            'address': "Địa chỉ",
            'phone_number': "Số điện thoại",
        }

profile.html

<div class="col-lg-10">
         <div class="form-group">
              <label for="id_date_of_birth"><h6>Ngày sinh</h6></label>
              <input type="text" name="date_of_birth" value="1998-09-26" placeholder="Date of Birth" class="form-control" required id="id_date_of_birth">
         </div>
</div>

1 个答案:

答案 0 :(得分:0)

您只需要在ModelForms字段上设置blank=true

models.py

class UserInfor(models.Model):
    GENDERS = (
        ('nam', "Nam"),
        ('nữ', "Nữ"),
        ('khác', "Khác")
    )
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    date_of_birth = models.DateField(null=True, blank=true)
    gender = models.CharField(choices=GENDERS, max_length=10, null=True, blank=true)
    address = models.CharField(max_length=255, null=True, blank=true)
    phone_number = models.CharField(max_length=10, null=True, blank=true)

    def __str__(self):
        return self.user.username