Kann ich ein in Django nicht benötigtes Admin-Feld erstellen, ohne ein Formular zu erstellen?

80

Jedes Mal, wenn ich einen neuen Player im Admin-Bereich von Django eingebe, erhalte ich die Fehlermeldung "Dieses Feld ist erforderlich".

Gibt es eine Möglichkeit, ein Feld nicht erforderlich zu machen, ohne ein benutzerdefiniertes Formular erstellen zu müssen? Kann ich dies in models.py oder admin.py tun?

So sieht meine Klasse in models.py aus.

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"
        )

Vielen Dank

bigmike7801
quelle
4
Am einfachsten ist es, die Feldoption blank = True ( docs.djangoproject.com/de/dev/ref/models/fields/#blank ) zu verwenden. Gibt es einen Grund, warum das nicht funktioniert?
Platinum Azure

Antworten:

158

Einfach gesagt

blank=True

in Ihrem Modell dh:

rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts",
        blank=True
        )
fabrizioM
quelle
Beachten Sie, dass bei Verwendung von "Formularen" das Leerzeichen = true nicht funktioniert. ZB hier funktioniert das Leerzeichen = true aus dem Modell nicht: Klasse MusModelForm (forms.ModelForm): name = forms.CharField (widget = forms.Textarea) # ~ mitglieder = forms.CharField (widget = forms.Textarea) Klasse Meta: model = Musiker
Timo
6

Verwenden Sie 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
        )
Dawn T Cherian
quelle
3
Sie sollten "null = True" für CharFields zumindest ab Django 1.6 nicht benötigen, wahrscheinlich sogar noch früher. Ähnliches gilt für TextField, SlugField, EmailField, ... alles, was als Text gespeichert ist.
Jenniwren
Django empfiehlt "null = True" nicht für Felder, die ausschließlich Text enthalten.
Kas
Es ist die vollständige Antwort. Danke fürs Schreiben.
Siraj Alam
1
@Paullo "Vermeiden Sie die Verwendung von null für stringbasierte Felder wie CharField und TextField. Wenn ein stringbasiertes Feld null = True hat, bedeutet dies, dass es zwei mögliche Werte für" keine Daten "hat: NULL und die leere Zeichenfolge. In den meisten Fällen In diesen Fällen ist es überflüssig, zwei mögliche Werte für "keine Daten" zu haben. Die Django-Konvention besteht darin, die leere Zeichenfolge und nicht NULL zu verwenden. Eine Ausnahme ist, wenn für ein CharField sowohl unique = True als auch blank = True festgelegt ist. In dieser Situation ist null = True erforderlich, um eindeutige Einschränkungsverletzungen beim Speichern mehrerer Objekte mit blank zu vermeiden Werte." docs.djangoproject.com/de/2.1/ref/models/fields/#null
Massood Khaari
1
@MassoodKhaari Ich verstehe, was du meinst und stimme dir zu, dass "Begründung nicht überzeugend ist".
Paullo