Django - получает имя объекта модели, перебирая класс - PullRequest
0 голосов
/ 13 декабря 2018

Я новичок в Python (и довольно неопытен в программировании в целом), но у меня есть проблема, с которой я не могу разобраться.

Я пытаюсь предварительно заполнить поле в моей базе данных именем экземпляра из другой модели / класса в моей базе данных.Модель с полем, которое я хочу предварительно заполнить, является «экземпляром» экземпляра модели, из которого я пытаюсь получить имя, и имеет внешний ключ для этого экземпляра.

Цель: 1) Пользователь выбирает родительский объект, назначая внешний ключ родительскому объекту. 2) Функция захватывает имя родительского экземпляра, соответствующего внешнему ключу, выбранному пользователем.3) результат этой функции используется в качестве значения по умолчанию для поля.

Вот код:

class Injury(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text='Unique ID for this particular injury')
    name = models.CharField(max_length=200, help_text='Enter an injury or complication (e.g. respiratory failure)')
    description = models.TextField(max_length=1000, blank=True, help_text='Describe the injury')
    time_to_onset = models.PositiveIntegerField(blank=True, validators=[MaxValueValidator(10000)], help_text='Enter expected time from trigger until injury/complication onset')
    findings = models.TextField(max_length=1000, blank=True, help_text='Enter the signs and symptoms of the injury or complication')
    vitals_trends = models.TextField(max_length=1000, blank=True, help_text='Enter the vitals changes due to the injury')

    class Meta:
        ordering = ['name']

    def __str__ (self):
        return self.name

    def get_absolute_url(self):
        return reverse('Injury-detail', args=[str(self.id)])




class Injury_Instance(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text='Unique ID for this particular injury')
    parent_case = models.ForeignKey(PFC_Case, on_delete=models.SET_NULL,null=True)
    injury_model = models.ForeignKey(Injury, on_delete=models.SET_NULL, null=True)

    def set_injury_name(self):
        for injuries in Injury.all()
            if injury_model == injuries
                break
        return Injury.name

    name = dislay_models.CharField(default=set_injury_name(self,Injury,injury_model), max_length=100)
    triggered_by = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True)

    def __str__ (self):
        return self.name

    def get_absolute_url(self):
        return f'{self.id} ({self.Injury.name})'

Проблемная область: def set_injury_name и Injury_Instance.name

Спасибо !!!

Редактировать:

Я попробовал следующий код, но я получаю сообщение об ошибке «NameError: имя« self »не определено»

class Injury_Instance(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text='Unique ID for this particular injury')
    parent_case = models.ForeignKey(PFC_Case, on_delete=models.SET_NULL,null=True)        
    injury_model = models.ForeignKey(Injury, on_delete=models.SET_NULL, null=True)

    def get_injury_name(self):
        return self.name

    injury_name=get_injury_name(self)

    name = models.CharField(default=injury_name, max_length=100)

    triggered_by = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True)

    def __str__ (self):
        return self.name
    def get_absolute_url(self):
        return f'{self.id} ({self.Injury.name})'

1 Ответ

0 голосов
/ 13 декабря 2018

Вам не нужно хранить имя поля внешнего ключа, так как вы всегда можете получить к нему доступ с помощью:

self.injury_model.name

Если вам нужно получить к нему доступ только с помощью name, вы можете написатьнедвижимость в модели Injury_Instance.

@property
def name(self):
    return self.injury_model.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...