2012-04-17 7 views
1

私はこれらのモデルを持っている:データベースビューが必要かどうか

class Company(models.Model): 
    name=models.CharField(max_length=100) 
    description=models.TextField() 
    #some more fields 

class Product(models.Model): 
    name=models.CharField(max_length=100) 
    company=models.ForeignKey(Company) 
    #some more fields 

class Category(models.Model): 
    parent=models.ForeignKey('self',null=True,blank=True) 
    name=models.CharField(max_length=100) 
    products=models.ManyToManyField(Product,null=True,blank=True) 
    #some more fields 

Uは、各企業は、製品のリストを持っており、各製品は、いくつかのカテゴリに属して見ることができるように、私はcompany pkを使用して、各企業のカテゴリのリストを取得するつもりだ、何ですベストプラクティス?私はデータベースビューを定義する必要がありますか?これを行うにはどうすればよいですか?

注:私はこれまでdjangoでデータベースビューを使用していませんでした。私はそれについて調べましたが、それは簡単ではありません。

+0

あなたの質問は何ですか?会社と一致するカテゴリを取得するにはどうすればよいですか? – agf

+0

はい、そうするベストプラクティス! –

答えて

2

私はいつもデータベースビュー、ストアドプロシージャ、および一般的なものを、アプリケーションコードベースではなくむしろデータベース自体ではなく、メンテナンスが非常に難しいという単純な理由で避けようとしています。データベースに依存しないアプリケーションには良いことを言ってください)。ここ

私のアドバイスは、(多くのことを行うことができます)DjangoのORMに固執し、唯一のまともなパフォーマンスを得るためにあなたができない場合や、その解決のために行くだけにして、ストアドプロシージャ/ビューを利用できるいくつかの高度な機能が必要な場合です。

djangoでの表示は非常に簡単です。

クエリに1つのビューがあるとすると、ビューをデータベースに作成し、ビューの列(名前とタイプ)に一致するフィールドを持つモデルを作成します。

更新: 次に、メタクラス定義のビュー名としてテーブル名を設定する必要があります。

あなたはその上で書かないとビューモデルのためのテーブルを作成しようとしないためにはDjango伝える必要がありますその後、幸運にもそのためのconfがあります:

class ViewModel(models.Model): 
    ... view columns ... 

    class Meta(): 
     db_table = 'view_name' 
     managed = False 
+0

私は理解していないことは、モデルをビューに関連付ける方法ですか? –

+0

@Asma申し訳ありませんが、私はあなたの答えを今すぐに見ることができます:) –

+0

私は答えの変化を見ることができません:D –

1

私はなぜさっぱりだがここにdbビューが必要だと思います。一般的に、あなたはDjangoでそれらを使用しません。なぜなら、あなたはORMを介してPythonのすべてのロジックを実行するからです。

会社のカテゴリの一覧を取得するには、あなただけ行うことができます。

my_companyは、当社のインスタンスであるあなたが興味を持っている
categories = Category.objects.filter(products__company=my_company) 

+0

私は使用を強調していません私はたくさんの製品、tnxを持つテーマのいくつかの会社を持っているので、私はちょうど良いパフォーマンスでこれをしたいと思います: –

+0

この方法はパフォーマンスの問題がありません?そうなら、UはORMを使用します。 –

+0

@Asmaパフォーマンスの問題があるかどうか試してみてください。あなたがしていない場合 - それは良いパフォーマンスです。 – DrTyrsa

関連する問題