Функция Джанго как выбор Чарфилда - PullRequest
0 голосов
/ 05 ноября 2019

Рассмотрим следующие модели со следующими полями:

Способности :

class Power(models.Model):
    ...
    half = models.BooleanField()
    micro = models.BooleanField()

UseP :

class UseP(models.Model):
    ...
    power_policy = models.ForeignKey(Power, on_delete=models.CASCADE)

    def use_types():
        TYPES = []
        TYPES.append(("F", "Full Use"))
        if power_policy.half:
            TYPES.append(("H", "Half Use"))
        if power_policy.micro:
            TYPES.append(("M", "Micro Use"))

        return tuple(TYPES)

    use_type = models.CharField(max_length=1, choices=use_types())

Функция не запускается. Как видите, когда я пытаюсь без аргументов "self", он говорит, что power_policy не определено. Если я делаю это как self.power_policy, он распознает политику электропитания, но когда я получаю и вызываю функцию, подобную use_type = models.CharField(max_length=1, choices=self.use_types()), он говорит, что ключевое слово self не определено в этой строке.

IЯ думаю, что код объясняет все это, но в случае, если он не хочет, я могу предоставить выбор своим пользователям после того, как они выберут Power, в соответствии с опцией power. Для чего я создал функцию, но на самом деле она не работает. Что я делаю не так или это вообще невозможно?

Спасибо за потраченное время,

1 Ответ

1 голос
/ 05 ноября 2019

Если вы создаете метод в своем классе, который использует поля из этого класса - вы должны передать self аргумент в ваш метод.

Измените ваш метод на: def use_types(self):, тогда вы можете использовать вашполя типа self.power_policy.

Вы не можете использовать свое поле use_type таким образом. Если вы хотите установить use_type на основе поля power_policy, вы можете сделать это в вашем методе сохранения следующим образом:

def save(*args, **kwargs):
    if self.power_policy and self.power_policy.half:
        self.use_type = 'H'
    elif self.power_policy and self.power_policy.micro:
        self.use_type = 'M'
    return super(UseP, self).save(*args, **kwargs)
...