2017-11-22 6 views
0

私のニュース集計アプリケーションのモデル、ビュー、およびテンプレートを設計しています。私はテンプレートを使用して、データベースのオプションを持つ複数の選択肢のフィールドフォームをユーザーに提供します。私のモデルでこれをどのように設計するのですか?データベース内のオプションのDjango multiple-choiceフィールド

私はManyToManyField(ジャーナリストと記事を持つ人物)に関するDjangoのドキュメントを読んでいましたが、私のケースでは、記事がないジャーナリストとジャーナリストなしで存在する可能性があるため、 。

私はユーザーがいます。私はストリームを持っています。 Streamsは、ユーザーがCNN、Twitter、Googleニュースなどの集計された見出しのスニペットに従うためにサインアップすることができるニュースサイトの集まりです。ストリームはユーザーなしで存在することができます。ストリームは多くのユーザーを持つことができます。ユーザーはストリームを作成することはできません。実際には、ストリームを選択しない限り、すべてのユーザーアカウントはアプリで開始されません。ユーザーは多数のストリームを持つことができます。

テンプレートでは、データベース内のすべてのストリームオプションのリストを使用してフォームを作成したいと考えています。ユーザーがストリームを選択すると、そのストリームはダッシュボードビューに追加されます。 Streamsを追加および削除できます。しかし、1つのTwitter、1つのGoogle Newsなどのソースしかありません。ユーザー・モデルでは典型的な選択肢のオプションを使用できません。「動的」で、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) 

ユーザー/ 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) 


    ''''' 

答えて

0

1つのモデルをストリームのリストに追加し、別のモデルをユーザーが選択したストリームに追加する

class Stream(models.Model): 
    name = models.CharField(max_length=50) 

class UserStream(models.Model): 
    user = models.ForeignKey(User) 
    name = models.ForeignKey(Stream) 

これだけです。可能なストリームをStreamモデルに挿入し、ユーザーが選択したストリームをUserStreamモデルに挿入します。

+0

ああ!私は、中間のテーブルを参照してください!ありがとうございました。 – cssidy

0

ManyToManyFieldはすでに、受け入れられた回答に記載されている「中間テーブル」を暗黙的に作成します。ドキュメントの通り:

シーンの裏には、Djangoは多対多の関係を表す への中間結合テーブルを作成します。

フォームの生成時に利用可能な選択肢のリストを動的に決定することができるように、あなたがユーザーに表示ChoicesFieldchoices場に呼び出し可能に渡すことができます。

ユーザー< - >ストリーム関係の有効な選択肢のリストは既に関係によって制約されているため、モデル項目で使用可能な選択肢を指定することは効果がありません。

関連する問題