Сложность добавления виджета в проект django - PullRequest
0 голосов
/ 25 апреля 2020

Во-первых, я прошу прощения за очень простой c вопрос, но в настоящее время я учусь разрабатывать, прочитал много документации и много искал, но все еще не могу заставить это работать.

Я строю веб-сайт, использующий Django framework, пытаюсь добавить виджет django - bootstrap -datepicker-plus . У меня много трудностей с определением, где именно различные части кода должны go. Я включил фрагменты из моих файлов model.py и forms.py ниже. Формы работают так же, как и сейчас, но я сталкиваюсь с множеством проблем при попытке добавить виджет datePicker.

Я добавил соответствующие файлы в INSTALLED_APPS.

class PersonalInformation(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    GENDERS = (
        ('M', 'Male'),
        ('F', 'Female'),
    )

    first_name = models.CharField(max_length=200, default='')
    surname = models.CharField(max_length=200, default='')
    gender = models.CharField(max_length=1, choices=GENDERS)
    dob = models.DateTimeField(datetime.datetime.now())
class PersonalInformationForm(forms.ModelForm):
    class Meta:
        model = PersonalInformation

        # i know this bit is wrong but cannot fix it
        dob = forms.DateField(widget=DatePickerInput(format='%m/%d/%Y'))

        fields = ['first_name', 'surname', 'gender', 'dob']

Он запускается, но в поле dob просто отображается метка времени, которая была сохранена при создании пользователя (на самом деле я вообще не хочу сохранять дату, пока пользователь не введет ее, но я должен установить значение по умолчанию, иначе оно не будет мигрировать) и не ' не отображать виджет.

Большое спасибо, и я прошу прощения за тот самый базовый c вопрос, но я потратил часы, пытаясь разобраться в этом, и я просто иду по кругу.

1 Ответ

0 голосов
/ 25 апреля 2020

1) вы можете установить значение NULL в поле «Дата» и значение по умолчанию «Нет». Этот способ не будет получать значение по умолчанию () при каждом сохранении нового экземпляра.

dob = models.DateTimeField(null=True, default=None)

2) В вашей форме, чтобы переопределить виджет поля по умолчанию так, как вы пытались, вы должны сделать это вне мета-класса:

class PersonalInformationForm(forms.ModelForm):

   dob = forms.DateField(widget=DatePickerInput(format='%m/%d/%Y'))
   class Meta:
      model = PersonalInformation
      fields = ['first_name', 'surname', 'gender', 'dob']

или с атрибутом виджета в пределах мета-класса:

class PersonalInformationForm(forms.ModelForm):

      class Meta:
         model = PersonalInformation
         fields = ['first_name', 'surname', 'gender', 'dob']
         widgets = {
            'dob': DatePickerInput(format='%m/%d/%Y')
         }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...