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

各企業には製品のリストがあり、各製品はいくつかのカテゴリに属していることがわかります。各企業のカテゴリのリストはcompany pk、「ベストプラクティス」を使用して取得します。データベースビューを定義する必要がありますか?どうすればよいですか?これ?

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

4

2 に答える 2

2

私は常に、データベース ビュー、ストアド プロシージャ、および一般的にアプリケーション コード ベースではなくデータベース自体に「存在する」ものを使用しないようにしています。これは、保守が非常に難しいという単純な理由からです (また、データベースに依存しないアプリケーション)。

ここでの私のアドバイスは、適切なパフォーマンスを得ることができない場合、またはストアド プロシージャ/ビューを介して利用可能な高度な機能が必要な場合にのみ、django orm (多くのことができる) に固執することです。

django でビューを使用するのは非常に簡単です。

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

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

その後、django にそれを記述しないように、またビュー モデル用のテーブルを作成しようとしないように指示する必要があります。幸いなことに、そのための conf があります。

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

    class Meta():
        db_table = 'view_name'
        managed = False
于 2012-04-17T08:20:06.967 に答える
1

ここで db ビューが必要だと思う理由がわかりません。通常、ORM を介して Python ですべてのロジックを実行するため、Django ではそれらを使用しません。

会社のカテゴリのリストを取得するには、次のようにします。

categories = Category.objects.filter(products__company=my_company)

関心のある Company インスタンスはどこにmy_companyありますか。

于 2012-04-17T08:36:55.530 に答える