首页 > 解决方案 > 无法将属性添加到 __init__ 的 ModelForm 字段

问题描述

我有以下模型,它返回 ManyToMany 字段 ( approvers) 中的值作为Integerfield( ) 中的选择step

from django.utils.functional import lazy

class Task(models.Model):
    step = models.IntegerField(null=True)
    approvers = models.ManyToManyField(
        get_user_model(),
    )

    @property
    def get_step_choices(self):
        CHOICES = []
        if self.approvers:
             CHOICES = [(a.id, a.email) for a in self.approvers.all()]
        return CHOICES

    def __init__(self, *args, **kwargs):
        super(Task, self).__init__(*args, **kwargs)
        self._meta.get_field('step')._choices = lazy(
            self.get_step_choices, list
        )()

但是,我在init下使用的语法似乎不会将选项 attr 呈现为step. 我哪里错了?

标签: djangodjango-models

解决方案


推荐阅读