Django 如何更新字段实例的选项,而不是整个字段的选项?

Django 如何更新字段实例的选项,而不是整个字段的选项?,django,django-models,django-forms,Django,Django Models,Django Forms,我有一个带有选项的模型字段: class MyModel(models.Model): myfield = models.CharField(max_length=1000, choices=(('a','a'),('b','b')) 我知道我可以在表单中访问此特定字段并覆盖其选项选项,如下所示: self.instance._meta.get_field(field_name).choices = (('c','c'),('d','d')) 但这将改变整个模型的选择,而不是单个实例

我有一个带有选项的模型字段:

class MyModel(models.Model):
    myfield = models.CharField(max_length=1000, choices=(('a','a'),('b','b'))
我知道我可以在表单中访问此特定字段并覆盖其
选项
选项,如下所示:

self.instance._meta.get_field(field_name).choices = (('c','c'),('d','d'))

但这将改变整个模型的
选择
,而不是单个实例。仅针对一个特定实例或不可能这样做的正确方法是什么?

我不知道有任何方法可以基于每个实例更改模型的字段选择,但如果是针对表单,则可以覆盖表单的字段选择(示例从内存中写入,因此可能无法100%准确):

类MyModelForm(forms.ModelForm): 类元: model=MyModel

def __init__(self, *args, **kw):
    super(MyModelForm, self).__init__(*args, **kw)
    if some_condition:
        self.fields["myfield"].choices = (...)
重要:您希望覆盖
self.fields[“myfield”]
而不是
self.myfield
-后者是类属性,因此更改它会影响当前进程的所有
MyModelForm
实例,在运行dev服务器时,您通常不会注意到一些问题,但这将导致生产上的行为非常不稳定