2012-04-05 7 views
0

diese zwei Klassen, die ich habe immer einen Zweifel davon ist die beste Praxis „Verknüpfung“ sie (falls vorhanden)Datenbankmodell Best Practices - also Umfrage

Frage

class Question(models.Model): 
    text = models.CharField('Question',max_length=120) 
    created = models.DateTimeField(auto_now_add=True) 
    opens = models.DateTimeField() 
    closes = models.DateTimeField() 

Antwort

class Answer(models.Model): 
    text = models.CharField('Answer',max_length=120) 
    votes = models.IntegerField(default=0) 

Wrong - kann ich diese Zeile hinzufügen zu beantworten (dies war ein copy/paste Fehler):

answers = models.ForeignKey(Answer) 

Edit:

answers = models.ManyToManyField(Answer) 

ich diese Zeile hinzufügen können, um Antwort:

question = models.ForeignKey(Question) 

Ich mag möchte wissen, ob es wirklich keine Rolle, oder sollte ich anders betrachten Aspekte.

Danke!

Antwort

2
class Question: 
    answer = models.ForeignKey(Answer) 

„diese besondere Frage hat nur eine mögliche Antwort ".


class Answer: 
    question = models.ForeignKey(Question) 

"Diese Antwort auf eine bestimmte Frage gehört nur, aber diese Frage könnten mehrere separate Antworten haben"


class Answer: 
    question = models.ManyToManyField(Question) 

„Diese besondere Antwort ist ein Beantworte mehrere Fragen. So Fragen können mehrere separate Antworten "


class Question: 
    answers = modes.ManyToManyField(Answer) 

" Diese Frage haben mehrere unterschiedliche Antworten gegeben. Auch Antworten können zu mehreren Fragen gehören."[beste Ansatz]


Eine Frage hat Antworten zu haben. Sie haben keine Antwort (in der Regel) machen mehrere Fragen zu beantworten, anstatt eine Antwort beantwortet eine bestimmte Frage, aber es kann seien Sie mehrere Antworten (von verschiedenen Benutzern zum Beispiel). Deshalb würde ich wählen 4.

1
answers = models.ForeignKey(Answer) 

question = models.ForeignKey(Question) 

Diese sind nicht gleichwertig. Die erste (vorausgesetzt, Sie meinten, die erste sollte auf Question werden bedeutet, dass eine Frage nur eine Antwort hat, aber eine Antwort hat mehr als eine Frage - das ist nicht das, was Sie wollen.

Die zweite wird bedeuten, dass eine Antwort hat eine einzige Frage, und dass Fragen werden mehr als eine Antwort haben, die vermutlich ist, was Sie wollen. Standardmäßig ist dieser ein answer_set Feld alle einer Fragen Antwort auf Frage hinzufügen wird enthält.

+0

Kann ich auf die Antwort-Set von einer Frage wie ein Attribut wie Frage.answer_set? –

+0

@ XaviColomer Ja, Frage.answer_set wird eine Abfrage, die Sie verwenden können. "Ie question.answer_set.all() gibt alle Antworten für diese Frage zurück. Siehe: https://docs.djangoproject.com/en/dev/to pics/db/queries/# rückwärtsbezogene Objekte – Jim

+0

Ich habe die Frage bearbeitet, um einen kleinen Fehler zu beheben. Meine Frage ist, gibt es irgendwelche Leistungsprobleme? Ist eine Lösung besser als die andere (für Lazy Loading, etc ...) Danke! –