13 Stimmen

django - erstellen Sie ein Modell, das Sie mehrere Werte für das gleiche Feld einfügen können?

Ok ich versuche, etwas zu tun, die sehr einfach in meinem Kopf sein sollte, aber ich bin wahrscheinlich einige SQL oder django Admin Wissen fehlt, um es zu bekommen. Sagen wir, ich habe ein einfaches Modell wie

class Book(models.Model):
    title = models.CharField(max_length = 50)
    review = models.TextField()

und ich möchte, dass das Feld "Bewertung" auf der Verwaltungsseite ein kleines Pluszeichen hat, um weitere Bewertungen zu derselben Modellinstanz hinzuzufügen, damit die Vorlage sie durchgehen kann.

Ich weiß, ich könnte ein m2m-Feld für die Bewertungen erstellen und es würde mir genau das geben, aber ich möchte lieber, dass diese zusätzlichen Bewertungen von der gleichen Seite ohne Popups gefüllt werden könnten (für meine hilflosen Benutzer möchte ich es als WSIWYG wie möglich halten, da diese Textfelder tinyMCE angetrieben werden), und ich frage mich, ob es wirklich notwendig ist, ein extra Modell nur für ein Textfeld zu erstellen

23voto

Jonny Buchanan Punkte 60128

Erstellen einer Review Modell, das den Rezensionstext enthält und eine ForeignKey a Book ...

class Book(models.Model):
   title = models.CharField()

class Review(models.Model):
   book = models.ForeignKey(Book, related_name='reviews')
   review = models.TextField()

...dann registrieren Sie den entsprechenden Typ von InlineModelAdmin um alle zugehörigen Rezensionen auf der Seite des Buches in der Verwaltung zu bearbeiten. Ich würde vorschlagen, eine StackedInline in diesem Fall:

class ReviewInline(admin.StackedInline):
    model = Review

class BookAdmin(admin.ModelAdmin):
    inlines = [
        ReviewInline,
    ]

Die Dokumentation enthält ein Beispiel für fast genau dieses Szenario, allerdings mit mehreren Autoren anstelle von mehreren Bewertungen:

0voto

d1spstack Punkte 458

Eine weitere Option seit Django 3.1. könnte die Erstellung eines JSON-Feldes und die Speicherung mehrerer Werte in einem Schlüssel-Wert-Paar sein. Das ist zwar nicht für alle Fälle geeignet, aber für einige, die zu diesem Thema kamen, könnte es funktionieren. Verweis auf Django-Dokumente https://docs.djangoproject.com/en/3.2/ref/models/fields/#jsonfield

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X