【问题标题】:Queryset in django admin breaks migrations and py.testdjango admin 中的查询集中断迁移和 py.test
【发布时间】:2015-07-02 15:44:00
【问题描述】:

我在加载 py.test 期间收到 FATAL: database "xxxxxxxxx" does not exist。这是来自管理表单的加载,其中我有一个查询集被传递给ModelChoiceField

class CustomChoiceField(forms.ModelChoiceField):
    def __init__(self, queryset=None, *args, **kwargs):
        return super().__init__(SomeModel.objects.limited_qs(), *args, **kwargs)


class SomeModelForm(forms.ModelForm):
    some_model = CustomChoiceField()

    class Meta:
        model = SomeModel


class SomeModelAdmin(admin.ModelAdmin):
    form = SomeModelForm

我试过了

formfield_overrides = { models.ForiegnKey : {'queryset': ... } }

py.test 都会导致同样的问题

编辑

__init__ 方法或formfield_overrides 中使用查询集也会中断迁移。

注意:这些都完全按照我希望它们在服务器上的工作方式 - 它们只是阻止我运行任何测试。

我如何让它通过(没有条件地注册我的管理内容;_;我喜欢 tdd)

【问题讨论】:

  • 你的测试代码是什么样的?
  • 我有 200 个测试,从 API 的集成测试到存根用户模型的单元测试。堆栈跟踪来自创建查询集的__init__。它甚至不加载测试本身——只是出错。根是python3.4/site-packages/_pytest/config.py

标签: python django django-admin pytest django-migrations


【解决方案1】:

我有一个类似的问题,就我而言,问题是在我的 SomeModel.objects.limited_qs() 中,我正在调用另一个查询集,例如:

self.filter(another_model=AnotherModel.objects.get(xxx=1))

因此,为了构建查询集,在创建测试数据库之前执行了对数据库的调用,导致“致命数据库不存在”

【讨论】:

    猜你喜欢
    • 2020-02-12
    • 2018-10-10
    • 2012-09-03
    • 1970-01-01
    • 2015-07-11
    • 2020-06-07
    • 2011-02-06
    • 2013-02-11
    • 2020-09-20
    相关资源
    最近更新 更多