2017-04-23 3 views
1

Ich lerne Django durch Erstellen einer Abfrage-Anwendung. Für Anfänger habe ich drei Modelle Benutzer, Frage und Auswahl.Speichern Sie zwei Arten von Wert in einzelnen Django-Modellfeld

class User(....): 
    .... 
    Questions_voted = models.ManyToManyField(Question) 
    .... 

bedeutet dies, dass ein Benutzer für so viele Fragen zu stimmen, wie er will. Als nächstes folgt das Frage-Modell, das einfach ist und nur den Fragetext und die Anzahl der dafür ausgewählten Personen speichert.

class Question(models.Model): 
    question_text = models.CharField(max_length=500) 
    vote_count = models.IntegerField(...) 

nächste ist Choices, die eine choice_text haben und bezieht sich auf die ihm gehört.

class Choice(models.Models): 
    choice_text = models.CharField(models.Model) 
    question = models.ForeignKey(Question,...) 

Jetzt möchte ich Informationen speichern, was Wahl ein Benutzer für eine Frage ausgewählt. Es ist sehr klar, wenn man darüber nachdenkt, aber ich stecke wegen mangelndem Wissen über Arten von Feldern in Django-Modellen fest.

Antwort

2

Ich empfehle Ihnen, Modellschema zu ändern. Hier wird vorgeschlagen, Modell:

Suggested ER model

Ich habe UserVote Modell, das von User ausgewählte Informationen über Question und Choice hält.

from django.conf import settings 

class UserVote(models.Model): 
    question = models.ForeignKey('Question') 
    choice = models.ForeignKey('Choice') 
    user = models.ForeignKey(settings.AUTH_USER_MODEL) 

EDIT: Wie vorgeschlagene Schema lesen: User können viele UserVote s haben (es gibt Many-To-One Beziehung - in Django Sie einfach ForeignKey-UserVote hinzufügen). Jede UserVote muss eine einzige haben Question und Choice. Der Rest ist dein altes Schema. Übrigens habe ich Crows Fußnotation verwendet (https://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation).

+0

hey danke! Bedeutet dieses Symbol viele zu eins? –

+1

Ja, es gibt eine 'Viele-zu-Eins'-Beziehung. Siehe Bearbeiten meiner Antwort. – illagrenan

Verwandte Themen