重置模型__init__ get_field()。默认

时间:2017-08-09 16:34:48

标签: python django

我无法重置 init 默认值。

我有一个选择的模型,没有默认值。 我有这个模型的两个代理模型,初始化为。

class Test(models.Model):
   CHOICE_LIST = ((1, 'Choice1'),(2, 'Choice2') 
   type_test = models.CharField(choices=CHOICE_LIST, max_length=1)

class Test1Manager(models.Manager):
    def get_queryset(self):
        return super(Test1Manager,self).get_queryset().filter(type_test='1')

class Test2Manager(models.Manager):
    def get_queryset(self):
        return super(Test2Manager,self).get_queryset().filter(type_test='2')

class test1(Test):
    objects = Test1Manager()
    class Meta :
        proxy = True

    def __init__(self, *args, **kwargs):
        self._meta.get_field('type_test').default = '1'
        super(Test1, self).__init__(*args, **kwargs)

class test2(Test):
    objects = Test2Manager()
    class Meta :
        proxy = True

    def __init__(self, *args, **kwargs):
        self._meta.get_field('type_test').default = '2'
        super(Test2, self).__init__(*args, **kwargs)

在admin中,当我添加Test1的实例时,type_test的值为1,正如我预期的那样。 当我添加Test2的实例时,该值也是正确的,默认值为2.

但是当我添加一个Test实例时,该字段的默认值是最后一个打开的。 事实上,如果在我打开test2_admin之前,Test中字段的默认值将为2.

所以我想在Test model上重置这个字段的默认值。

我尝试设置default = None,但在这种情况下,select字段只显示值1和2,没有空值,因此默认情况下,此字段的值将是第一个。

感谢您的帮助,所以抱歉我的英语不好:)

1 个答案:

答案 0 :(得分:0)

所以我试图在我的choice_list中添加一个空值,并默认为我的类Test设置它。

如果我将其添加到我的字段中,则没有任何反应,因为我的代理的 init 会覆盖默认值。 但是如果我在我的类 init 上添加它,而不是重置此类的值,则重置所有代理类的值。也许是因为代理类继承了父 init

因此,如果父类具有自己的默认值,则无法为代理分配默认值。