Чи можу я зробити поле адміністратора, яке не потрібно в 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 не буде працювати. Наприклад, порожнє = true з моделі не буде працювати: клас MusModelForm (forms.ModelForm): name = forms.CharField (віджет = forms.Textarea) # ~ mitglieder = forms.CharField (віджет = forms.Textarea) клас Meta: модель = Музикант
Тимо

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

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 Я розумію, що ти маєш на увазі, і я погоджуюся з тобою, що "обґрунтування непереконливе".
Полло,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.