【问题标题】:Reset models __init__ get_field().default重置模型 __init__ get_field().default
【发布时间】:2018-01-17 16:05:09
【问题描述】:

我无法重置我的 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)

在管理员中,当我添加一个 Test1 的实例时,type_test 的值是 1,正如我所料。 当我添加一个Test2的实例时,值也是正确的,默认值为2。

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

所以我想在测试模型上重置这个字段的默认值。

我试过设置default=None,但是在这种情况下,选择字段只显示值1和2,没有空值,所以默认情况下,该字段的值将是第一个。

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

【问题讨论】:

标签: python django


【解决方案1】:

所以我尝试在我的选择列表中添加一个空值,并为我的类 Test 默认设置它。

如果我将它添加到我的字段中,什么都不会发生,因为我的代理的 init 会覆盖默认值。 但是,如果我将它添加到我的类 init 上,而不是重置该类的值,这会重置所有代理类的值。可能是因为代理类继承了父init

所以如果父类有自己的默认值,就不可能给代理分配默认值。

【讨论】:

    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 2015-06-26
    • 2017-05-28
    相关资源
    最近更新 更多