2017-02-18 14 views
1

Models.pyは以下のとおりです。リリース表には、SystemRequirementテーブルを指す外部キーsystem_requirements_idを持っているが、私はリリーステーブルのsystem_requirementsフィールドには内容がない場合にのみ、ユーザーがをsystem_requirements_id埋める必要があることを望みます。それ以外の場合は、system_requirements_idは空白のままにできます。それをどうやって実装するのですか?DJANGOモデルに条件付き外部キーフィールドを追加する

class SystemRequirement(TimeStampedModel): 
    code_name = models.TextField(blank=True) 
    content = models.TextField() 
    creation_date = models.DateField(auto_now=False, auto_now_add=True) 

    def __unicode__(self): 
     return self.code_name 

class Release(TimeStampedModel): 
    system_requirements = models.TextField(blank=True) 
    system_requirements_id = models.ForeignKey(SystemRequirement, 
    blank=True, null=True) 
+0

? –

+0

エラーはありません。私はその機能を実装したいと私はdjangoでそれを行う方法を知らない。 –

+0

フォーム/モデルのメソッドをクリーンアップするには、これを追加する必要があります。 – Lucas03

答えて

0

私の提案は次のとおりです。 -

Models.py -

class Release(TimeStampedModel): 
    system_requirements_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    system_requirements = models.TextField(blank=True) 



class SystemRequirement(TimeStampedModel): 
    system_requirements_id = models.ForeignKey(Release) 
    code_name = models.TextField(blank=True) 
    content = models.TextField() 
    creation_date = models.DateField(auto_now=False, auto_now_add=True) 

    def __unicode__(self): 
     return self.code_name 

views.py-(クエリ)

上記のコードで見られるものの行動/エラー
#check system_requirements text in Release table 
try: 
    SystemRequirement =  Release.objects.get(system_requirements='MatchingText') 

    #If got matching result means text exist so don't do anything 

except ObjectDoesNotExist: #No matching query 
    Release.objects.filter(system_requirements='MatchingText').update(system_requirements_id='SomeId') 
+0

なぜUUIDフィールドを使用しましたか?それはどんな特別な目的にも役立つのですか? –

+0

UUID関数は128ビットの一意のIDを作成します(主にPKに使用します)。 –

+0

UUIDフィールドの代わりにAutoFieldを使用することはできませんか? –

関連する問題