2017-02-18 5 views
1

Models.py wird unten angezeigt. Die Release-Tabelle hat einen Fremdschlüssel system_requirements_id die SystemRequirement Tabelle auf die Punkte, aber ich möchte, dass der Benutzer die system_requirements_id nurfüllen sollte, wenn kein Text in das Feld system_requirements ist in der Release-Tabelle. Andernfalls kann system_requirements_id leer gelassen werden. Wie implementiere ich das?Fügen Sie ein bedingtes Fremdschlüsselfeld in einem DJANGO-Modell hinzu

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

, welches Verhalten/Fehler mit dem obigen Code zu sehen ist ? –

+0

Es gibt keinen Fehler. Ich möchte diese Funktionalität implementieren und ich weiß nicht, wie man es im Django macht. –

+0

Sie sollten dies zur sauberen Methode in Ihrem Formular/Modell hinzufügen. – Lucas03

Antwort

0

Mein Vorschlag ist: -

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- (Query)

#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

Warum haben Sie das UUID-Feld verwendet? Eignet es sich für einen bestimmten Zweck? –

+0

UUID-Funktion erstellt 128 Bit eindeutige ID. (Meistens für die PK verwenden). –

+0

Können wir nicht AutoField anstelle von UUID-Feld verwenden? –

Verwandte Themen