2016-12-07 4 views
2

5年生では、研究論文の概要を学んだとき、私たちの先生は、あなたには一重のポイントがないはずがないと教えてくれました。私はこのルールを破っているように感じ、より良い方法があるかもしれません。Django - 1つのフィールドしか持たないモデルはありますか?

私はモデルがMovieであり、titleyearのようなフィールドを持っています。 genreも含めたいと思います。しかし、映画は複数のジャンルに分類できます。だから私は多対多の関係を持つ必要があるように感じる。しかし、私は本当にGenreを作ることを望んでいません。それは1つのフィールド、Genre.genreしかないので、それは自分のモデルクラスです。私にとっては間違っているようです。私はジャンルをCharFieldにして、セパレーターのセンチネルと別のジャンル、つまりaction|adventure|comedyを分けることができます。しかし、それを行う最善の方法はありますか?

このデータベースに対して未処理のSQLクエリを実行する予定であるため、現在はシンプルさが高い価値があります。

+0

https://pypi.python.org/pypi/django-multiselectfield/またはhttps://pypi.python.org/pypi/django-select-multiple-field/をお試しください。これにより、ジャンル選択文字列にカンマ自体が含まれる可能性があるため、カンマで選択肢を区切る必要はありません。 –

答えて

2

単一の属性を持つモデルに関しては、そのような品質の一般的なルールはありません。映画は複数のジャンルを持つことができ、ジャンルは明らかに複数の映画に属している可能性があるため、ManyToManyの関係がベストショットになるかもしれません。

あなたのモデルにgenresTextFieldがあり、すべてのジャンルをカンマ区切りのリストとして保存することもできます。このアプローチの多くの明白な問題の中には、ジャンル別に映画を効率的に照会することができず、2つの異なるムービーインスタンスで同じジャンルが異なる方法で書き込まれるという保証はありません。

PostgreSQLを使用している場合、genresArrayListとしてCharFieldと定義することもできます。すべての可能なジャンルで定数を定義し、CharFieldchoicesに渡します。

COMEDY = 'COMEDY' 
ADVENTURE = 'ADVENTURE' 
ACTION = 'ACTION' 
# ... 

GENRE_CHOICES = (
    (COMEDY, 'Comedy'), 
    (ADVENTURE, 'Adventure'), 
    (ACTION, 'Action'), 
    # ... 
) 
0

AFAIKこのようなルールはありません。 genreが別のモデルであることは理にかなっています。だから、すべてのジャンルに問い合わせをしたり、映画にアクセスしたりすることは、そのジャンルがもっと真っ直ぐなものになるだろう。

まだ気分が悪い場合はGenreモデルにcreated_timecreated_userフィールドを入れてください。あなたは後でそれが役に立つと思うでしょう。

関連する問題