Могу ли я сделать поле администратора необязательным в Django без создания формы?


83

Каждый раз, когда я вхожу в новый проигрыватель в административной части Django, я получаю сообщение об ошибке: «Это поле обязательно для заполнения».

Есть ли способ сделать поле необязательным без создания специальной формы? Могу ли я сделать это в models.py или admin.py?

Вот как выглядит мой класс в models.py.

class PlayerStat(models.Model):
    player = models.ForeignKey(Player)

    rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts"
        )
    rushing_yards = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Yards"
        )
    rushing_touchdowns = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Touchdowns"
        )
    passing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Passing Attempts"
        )

благодаря


4
Самый простой способ - использовать параметр поля blank = True ( docs.djangoproject.com/en/dev/ref/models/fields/#blank ). Есть ли причина, по которой это не сработает?
Platinum Azure

Ответы:


162

Просто положите

blank=True

в вашей модели, то есть:

rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts",
        blank=True
        )

Имейте в виду, что если вы используете «формы», blank = true не будет работать. Например, здесь blank = true из модели не будет работать: class MusModelForm (forms.ModelForm): name = forms.CharField (widget = forms.Textarea) # ~ mitglieder = forms.CharField (widget = forms.Textarea) class Meta: model = Musician
Тимо

6

Используйте blank = True, null = True

class PlayerStat(models.Model):
    player = models.ForeignKey(Player)

    rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts",
        blank=True,
        null=True
        )
    rushing_yards = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Yards",
        blank=True,
        null=True
        )
    rushing_touchdowns = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Touchdowns",
        blank=True,
        null=True
        )
    passing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Passing Attempts",
        blank=True,
        null=True
        )

3
Вам не нужно "null = True" в CharFields, по крайней мере, начиная с Django 1.6, возможно, даже раньше. Аналогично для TextField, SlugField, EmailField ... всего, что хранится в виде текста.
jenniwren 01

Django не рекомендует использовать "null = True" для полей, содержащих только текст.
kas

1
@Paullo "Избегайте использования null в строковых полях, таких как CharField и TextField. Если строковое поле имеет null = True, это означает, что оно имеет два возможных значения для" нет данных ": NULL и пустая строка. случаях, излишне иметь два возможных значения для «нет данных»; соглашение Django заключается в использовании пустой строки, а не NULL. Одно исключение - когда CharField имеет как unique = True, так и blank = True. В этой ситуации требуется null = True, чтобы избежать нарушений уникальных ограничений при сохранении нескольких объектов с пустым значения." docs.djangoproject.com/en/2.1/ref/models/fields/#null
Massood Khaari

1
Хотя логика мне неубедительна. :)
Massood Khaari

1
@MassoodKhaari Я понимаю, что вы имеете в виду, и согласен с вами в том, что "обоснование неубедительно".
Paullo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.