2017-02-18 4 views
1

Models.py показано ниже. Таблица выпуска имеет внешний ключ system_requirements_id, что указывает на таблицу SystemRequirement, но я хочу, чтобы пользователь должен заполнить system_requirements_idтолько тогда, когда нет никакого текста в поле system_requirements в таблице Release. В противном случае 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 Field. Он служит какой-либо специальной цели? –

+0

Функция UUID создает уникальный 128-битный идентификатор (в основном используется для ПК). –

+0

Не можем ли мы использовать AutoField вместо поля UUID? –

Смежные вопросы