2017-02-18 62 views
1

Models.py如下所示。释放台有一个外键system_requirements_id指向SystemRequirement表,但我想,用户应填写system_requirements_id只有当在system_requirements场在释放台没有文字。否则,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

我们不能使用AutoField而不是UUID字段吗? –

相关问题