发布
社区首页 >问答首页 >自定义内联窗体上的raw_id字段查询

自定义内联窗体上的raw_id字段查询
EN

Stack Overflow用户
提问于 2018-02-17 04:23:34
回答 2查看 405关注 0票数 1

如何在raw_id外键的内联表单中自定义spyglas查询?

我试着重写formfield_for_foreignkey,但没有效果,我想这是因为它是用于下拉外键,而不是raw_id。我也尝试了一个自定义的小部件,但似乎在内联上不起作用。

EN

回答 2

Stack Overflow用户

发布于 2018-02-17 07:01:04

因此,经过大量的挖掘,这就是我想出来的。

代码语言:javascript
代码运行次数:0
复制
from django.admin import widgets

class ItemSubRecipeRawIdWidget(widgets.ForeignKeyRawIdWidget):
    def url_parameters(self):
        res = super(ItemSubRecipeRawIdWidget, self).url_parameters()
        # DO YOUR CUSTOM FILTERING HERE!
        res['active'] = True  # here I filter on recipe.active==True
        return res

class ItemSubRecipeInline(admin.TabularInline):
    def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
        field = super(ItemSubRecipeInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
        if db_field.name == 'recipe':
            field.widget = ItemSubRecipeRawIdWidget(rel=ItemSubRecipe._meta.get_field('recipe').rel, admin_site=site)
        return field

所以spyglass的东西是一个ForeignKeyRawIdWidget,你需要用一个自定义的来覆盖默认值。小部件上的url_parameters函数用于构建查询,该查询填充可用的对象外键列表。

票数 1
EN

Stack Overflow用户

发布于 2018-05-12 02:29:12

要做到以下几点就足够了:

代码语言:javascript
代码运行次数:0
复制
class ItemSubRecipeInline(admin.TabularInline):
    def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
        field = super(ItemSubRecipeInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
        if db_field.name == 'recipe':
            field.widget.rel.limit_choices_to = {'your_field_to_filter': True}
        return field
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48834334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档