【发布时间】:2013-09-20 09:48:01
【问题描述】:
我很好奇是否可以使用相关字段来引发自定义连接查询。 我想在 django-parler 中应用它,这是一个 Django 的多语言应用程序。
例如,当“slug”是一个翻译字段时,我想有:
MyModel.objects.filter(slug="foo")
作为:
MyModel.objects.fiter(translations__slug="foo")
在引擎盖下。 例如,RelatedField 类的 API 可以做到这一点吗?
我注意到RelatedField 类中有几个API 钩子,例如m2m_reverse_field_name()、m2m_target_field_name()、m2m_column_name()、extra_filters() 等。它们在GenericRelation 和django-taggit 的@ 中使用987654331@ 类,但我不知道这些是如何工作的。
注意django-parler 涵盖了实例的字段访问,我也希望将其扩展到 ORM 查询。
【问题讨论】:
-
如果你这样修改“过滤器”,你不能将它与指定翻译语言的条件结合起来。您可以替换管理器(可通过名称“objects”访问)并向其添加“your_filter”。我认为它更健壮,您的第一次实验应该使用添加的新过滤器,而不是完全替换。为什么你需要它?对于管理员或任何应用程序? (当我为不使用普通 SQL 的数据库扩展 db 驱动程序时,我深入研究了 ORM 内部结构。)
-
我不打算修改
filter()方法。相反,请在RelatedField方法中提供正确的结果,以便.filter()以这种方式运行。
标签: django django-orm django-models django-related-manager