Ich entwerfe ein Modell, eine Ansicht und eine Vorlage für meine News Aggregation App. Ich möchte, dass die Vorlage dem Benutzer ein Multiple-Choice-Formular mit Optionen aus der Datenbank anbietet. Wie gestalte ich das in meinem Modell?Django Multiple-Choice-Feld von Optionen in der Datenbank
Ich habe die Django-Dokumentation über ManyToManyField (die mit Journalisten und Artikeln) gelesen, aber ich denke nicht, dass das die richtige Beziehung ist, denn in meinem Fall können "Artikel" ohne einen Journalisten und Journalisten ohne einen Artikel existieren .
Ich habe Benutzer. Ich habe Streams. Streams ist eine Sammlung von News-Sites, die ein Nutzer abonnieren kann, um aggregierte Headline-Snippets zu sehen, z. B. von CNN, Twitter, Google News usw. Ein Stream kann ohne Nutzer existieren. Ein Stream kann viele Benutzer haben. Ein Benutzer kann keine Streams haben, tatsächlich starten alle Benutzerkonten in meiner App ohne Streams, bis sie eines auswählen. Ein Benutzer kann viele Streams haben.
In der Vorlage möchte ich ein Formular mit der Liste aller Stream-Optionen in der Datenbank erstellen (dies wird sich wahrscheinlich ändern, wenn ich in der Zukunft mehr Optionen anzeigen werde). Wenn ein Benutzer einen Stream auswählt, wird er der Dashboard-Ansicht hinzugefügt. Sie können Streams hinzufügen und löschen. Allerdings gibt es nur 1 Twitter, 1 Google News, etc. Quelle. Ich kann die typische Auswahloption im Benutzermodell nicht verwenden, ich möchte, dass sie "dynamisch" ist und direkt aus der Streams-Datenbank abgerufen wird.
Das ist, was ich habe jetzt aber ich weiß, es ist nicht richtig:
streams/models.py
from django.db import models
from django.contrib.auth.models import User
class Stream(models.Model):
user = models.ManyToManyField(User, blank=True, null=True)
name = models.CharField(max_length=30)
Benutzer/models.py
from django.db import models
class User(models.Model):
name = models.CharField(max_length=30)
'''''
#TODO: make this dynamic, streams is pulling from Streams model
streams = (
('Google News'),
('Yahoo News'),
('Twitter'),
('CNN'),
('New York Times'),
('NBC News'),
('Huffington Post')
)
stream_choices = models.CharField(max_length=9, choices=streams)
'''''
Ah! Ich sehe, ein Zwischentisch! Vielen Dank. – cssidy