Как сделать поле необязательным для ввода в django ModelForm? - PullRequest
0 голосов
/ 13 сентября 2018

Сценарий: Я создаю экземпляр ModelForm и передаю его шаблону, который отображает форму. Когда отправляется POST, код пытается выполнить поиск в базе данных по любому из заданных входных данных. Я не требую ввода всех входных данных, как в модели. Мне просто нужно ввести один (или несколько, если пользователь хочет выполнить поиск AND).

Вопрос: Как я могу сделать любое из полей ModelForm необязательным, где в Model это поле необязательно. Поле не является обязательным в модели, потому что у меня есть другая ModelForm, основанная на той же модели, где пользователь должен ввести все свои данные.

Моя модель:

class customer(models.Model):
    # Need autoincrement, unique and primary
    cstid = models.AutoField(primary_key=True, unique=True)
    name = models.CharField(max_length=35)
    age=models.IntegerField()
    gender_choices = (('male', 'Male'),
                            ('female', 'Female'))
    gender = models.CharField(
        choices=gender_choices, max_length=10, default='male')
    maritalstatus_choices = ( ('married', 'Married'),
                            ('unmarried', 'Unmarried'))
    maritalstatus = models.CharField(
        choices=maritalstatus_choices, max_length=10, default='Unmarried')
    mobile = models.CharField(max_length=15, default='')
    alternate = models.CharField(max_length=15, default='')
    email = models.CharField(max_length=50, default='', blank=True)
    address = models.CharField(max_length=80, default='', blank=True)
    city = models.CharField(max_length=25, default='', blank=True)
    occupation = models.CharField(max_length=25, default='', blank=True)
    bloodgroup_choices = (('apos', 'A+'),
        ('aneg', 'A-'),
        ('bpos', 'B+'),
        ('bneg', 'B-'),
        ('opos', 'O+'),
        ('oneg', 'O-'),
        ('abpos', 'AB+'),
        ('abneg', 'AB-'),
        ('unspecified', '-')
        )
    bloodgroup = models.CharField(choices=bloodgroup_choices, max_length=3, default='-', blank=True)
    class Meta:
        unique_together = ["name", "mobile", "age"]
    def __str__(self):
        return self.name

Моя форма:

class CheckinPatientMetaForm(ModelForm):
    class Meta:
        model = customer
        exclude = [
            'gender',
            'maritalstatus',
            'occupation',
            'bloodgroup'
        ]

views.py:

def checkin_patient(request):
    results = ''
    if request.method == 'POST':
        form = CheckinPatientMetaForm(request.POST)
        print("POST data",request.POST)
    else:
        form = CheckinPatientMetaForm()
    return render(request, 'clinic/checkin.html', {'rnd_num': randomnumber(), 'form': form, 'SearchResults': results})

1 Ответ

0 голосов
/ 13 сентября 2018

Как указано в комментариях @ bdbd , вы можете сделать это, указав required=False.

Например, если вы хотите, чтобы age поле было необязательным, добавьте его явно как

<b>from django import forms</b>


class CheckinPatientMetaForm(ModelForm):
    <b>age = forms.IntegerField(required=False)</b>

    class Meta:
        model = customer
        exclude = [
            'gender',
            'maritalstatus',
            'occupation',
            'bloodgroup'
        ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...