2017-04-23 3 views
1

私はポーリングアプリケーションを作成してdjangoを学んでいます。まず、ユーザー、質問、選択の3つのモデルがあります。単一のDjangoモデルフィールドに2種類の値を格納します

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

これは、彼が望んでいるように、ユーザーができるだけ多くの質問に投票することを意味します。次はThe Question Modelであり、単純であり、質問文とそれに投票された人数を保存するだけです。

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

next is choice_textを持ち、それが属する質問を参照する選択肢です。

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

ここで、ユーザーが質問に対して選択した選択肢に関する情報を保存します。それはあなたがそれを考えるときは非常に明確ですが、私はジャンゴのモデルのフィールドの種類の知識の不足のために立ち往生しています。

答えて

2

モデルスキーマを変更することをお勧めします。ここで提案されたモデルは:

Suggested ER model

は、私は約QuestionChoiceUserが選択した情報を保持しているUserVoteモデルを追加しました。

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:提案のスキーマを読み取る方法:Userは多くのUserVote Sを持つことができます(Many-To-One関係がある - ジャンゴにあなたは、単にUserVoteForeignKeyを追加します)。各UserVoteは、1つだけQuestionChoiceのいずれかを持つ必要があります。残りの部分は古いスキーマです。 Btw私はクロウの足記法(https://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Crow.27s_foot_notation)を使用しました。

+0

ありがとう!それらのシンボルは多対1を意味しますか? –

+1

はい、「多対1」の関係があります。私の答えの編集を参照してください。 – illagrenan

関連する問題