Czy mogę sprawić, by pole administracyjne nie było wymagane w Django bez tworzenia formularza?

83

Za każdym razem, gdy wchodzę do nowego odtwarzacza w części administracyjnej Django, otrzymuję komunikat o błędzie o treści „To pole jest wymagane.”.

Czy istnieje sposób, aby pole nie było wymagane bez konieczności tworzenia niestandardowego formularza? Czy mogę to zrobić w models.py lub admin.py?

Oto jak wygląda moja klasa w 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"
        )

Dzięki

bigmike7801
źródło
4
Najprostszym sposobem jest użycie opcji pola blank = True ( docs.djangoproject.com/en/dev/ref/models/fields/#blank ). Czy jest powód, dla którego to nie zadziała?
Platinum Azure,

Odpowiedzi:

162

Po prostu włóż

blank=True

w Twoim modelu tj:

rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts",
        blank=True
        )
fabrizioM
źródło
Pamiętaj, że jeśli używasz „formularzy”, puste = true nie zadziała. Np. Puste = true z modelu nie będzie działać: class MusModelForm (forms.ModelForm): name = forms.CharField (widget = forms.Textarea) # ~ mitglieder = forms.CharField (widget = forms.Textarea) class Meta: model = Muzyk
Timo
6

Użyj pustego = 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
        )
Dawn T Cherian
źródło
3
Nie powinieneś potrzebować "null = True" na CharFields przynajmniej od Django 1.6 do przodu, prawdopodobnie nawet wcześniej. Podobnie dla TextField, SlugField, EmailField, ... wszystkiego, co jest przechowywane jako tekst.
jenniwren
Django nie zaleca "null = True" dla pól zawierających wyłącznie tekst.
kas
1
@Paullo "Unikaj używania wartości null w polach opartych na ciągach, takich jak CharField i TextField. Jeśli pole oparte na ciągach ma wartość null = True, oznacza to, że ma dwie możliwe wartości dla„ no data ”: NULL i pusty ciąg. W większości przypadków przypadków, nie ma potrzeby mieć dwóch możliwych wartości dla „brak danych”; Konwencja Django polega na używaniu pustego ciągu, a nie NULL. Jedynym wyjątkiem jest sytuacja, gdy CharField ma ustawione zarówno unique = True, jak i blank = True. W tej sytuacji null = True jest wymagane, aby uniknąć unikalnych naruszeń ograniczeń podczas zapisywania wielu obiektów z pustą wartości ”. docs.djangoproject.com/en/2.1/ref/models/fields/#null
Massood Khaari,
1
Chociaż uzasadnienie jest dla mnie nieprzekonujące. :)
Massood Khaari,
1
@MassoodKhaari Rozumiem, co masz na myśli i zgadzam się z Tobą, że „uzasadnienie jest nieprzekonujące”.
Paullo,