Django充当Charfield Choices

使用以下字段考虑以下模型:

权力

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

使用P

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

该功能未运行。如您所见,当我尝试不使用“自我”参数时,它表示未定义power_policy。如果我像self.power_policy那样做,它会识别电源策略,但是当我得到并调用像use_type = models.CharField(max_length=1,choices=self.use_types())这样的函数时,它说self关键字未在此行中定义。 / p>

我认为代码说明了所有内容,但是如果不想,我希望在用户选择Power之后根据用户的电源选项为他们提供选择。为此,我创建了一个函数,但实际上似乎没有用。我在做错什么,还是不可能这样?

感谢您的时间,

ccc287718265 回答:Django充当Charfield Choices

如果您在类中使用该类中的字段创建方法,则必须将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)
本文链接:https://www.f2er.com/3158756.html

大家都在问