模型CharField选择中的动态选择

时间:2020-11-02 15:35:56

标签: django django-models

该文档显示了一个示例,该示例说明如何使用选项here

声明模型CharField。
class Student(models.Model):
    FRESHMAN = 'FR'
    SOPHOMORE = 'SO'
    JUNIOR = 'JR'
    SENIOR = 'SR'
    GRADUATE = 'GR'
    YEAR_IN_SCHOOL_CHOICES = [
        (FRESHMAN, 'Freshman'),
        (SOPHOMORE, 'Sophomore'),
        (JUNIOR, 'Junior'),
        (SENIOR, 'Senior'),
        (GRADUATE, 'Graduate'),
    ]
    year_in_school = models.CharField(
        max_length=2,
        choices=YEAR_IN_SCHOOL_CHOICES,
        default=FRESHMAN,
    )

列表YEAR_IN_SCHOOL_CHOICESclass Student的一部分。这是否意味着此列表存储在数据库中的某个位置?如果是这样,是否可以在运行时对其进行访问和修改? 假设我需要根据另一个模型类使此列表动态化。例如:

class Edu_Level(models.Model)
   level = models.CharField(max_length = 200)

每次我的应用创建一个新的Edu_Level时,我都希望将该级别添加到其他Student模型中的选择列表中。假设它们都在同一个应用程序中,这可能吗?谢谢。

1 个答案:

答案 0 :(得分:1)

在模型中设置您的选择是一个错误的选择,因为每次修改都会添加一个迁移。

您需要做的是创建一个ModelForm并从模型Edu_level中设置选择

EduLevelunique上有一个level

class StudentForm(forms.ModelForm):
    year_in_school = ModelChoiceField(queryset=EduLevel.objects.all())

    class Meta:
        model = ProfileDocument
        fields = ('year_in_school',)
相关问题