2017-06-03 9 views
1

私はサービス会社のDjangoで検査アプリケーションを設計しており、私のモデルについては秘密の質問があります。これは私が苦労してるシナリオです:私がやりたい何1つのモデル内のDjangoモデルフィールドを他の関連モデルの選択肢の1つを指すように割り当てます

Site(models.Model): 
    name = CharField() 

Generator(models.Model): 
    number = CharField() 
    site = ForeignKey(Site) 

Pump(models.Model): 
    number = CharField() 
    site = ForeignKey(Site) 

Jobs(models.Model): 
    asset = ? 
    site = ForeignKey(Site) 

はジョブズに資産フィールドに発電機またはポンプのオブジェクトのいずれかを割り当てることです。ジェネレータとポンプの両方の番号のリストを生成するのではなく、実際のモデルそのものを指し示すようにしてください。そうすれば、両方のテーブルをスキャンすることなく、それぞれのジョブを後方参照することができます。

アイデア?それは、仕事のモデルに資産の財産を持つのに役立つでしょうか?私はこれを思っていますか?

documentation

に見られるように、これは1行の答えですので、あなたは、一般的な外部キーを使用することができますジャンゴ1.11.1とPython 3.6に

答えて

0

を使用します。それを拡大するには:

from django.db import models 
from django.contrib.contenttypes.fields import GenericRelation 
from django.contrib.contenttypes.fields import GenericForeignKey 
from django.contrib.contenttypes.models import ContentType 

class Asset(models.Model): 

    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) 
    object_id = models.PositiveIntegerField() 
    content_object = GenericForeignKey('content_type', 'object_id') 
    ... 

class Job(models.Model): 

    assets = GenericRelation(Asset) 
    ... 
+0

これはおかげです。しかし、それぞれのGeneratorとPumpを上記で説明した資産クラスに関連付けるにはどうすればよいですか? –

+0

これはドキュメントにあります。すなわち、あなたはもうそれらを持っていません。それらの区別(資産の種類)を保持したい場合は、そのタイプをフィルタリングできるフィールドを追加するだけです。あなたは現在抽象的に定義されている任意の数の資産を持つことができます。可能なタグのすべての単一のタイプのクラスを定義しようとしているドキュメンテーションイメージングでは、ケースはあなたのアセットと似ています。 – Pythonista

+0

もう一度Pythonistaに感謝します。私はまだドキュメントの例を完全に理解していませんが、今どこで見るべきかを知っています。ここに一般的な関係についての記事がたくさんあるので、うまくいくはずです。正しい方向に私を指してくれてありがとう。 –

関連する問題