python - Django 管理员 : Accesing the parent instance within an Inline admin

标签 python django django-models django-admin admin

我有一个 Django 管理类,它声明了一个内联可迭代对象。像这样的东西:

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    ...
    ...
    inlines = [CategoryModifiersInline,]
    ...
    ...

然后我有一个像这样的内联管理类:

class CategoryModifiersInline(admin.TabularInline):

    model = Category.modifiers.through
    fk_name = 'category'
    extra = 1 


    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        qs = Product.objects.filter(is_modifier=True).filter(active=True)
        kwargs['queryset'] = qs
        return super(CategoryModifiersInline, self).formfield_for_foreignkey(db_field, request, **kwargs)

我根据某些业务需求过滤外键的查询集。

此内联仅在 change View 中向用户显示,这意味着,当创建类别 Category 的对象并且用户想要向其添加修饰符时,永远不会在 >添加 View 。

我想要做的是通过类别模型的属性之一过滤外键,我的意思是,我想从 formfield_for_foreignkey 方法访问父对象。

有谁知道实现这一目标的方法吗?

最佳答案

好吧,我找到了一个similar question在 StackOverflow 中,并使用那里描述的方法解决了这个问题。

它使用 parent_model来自内联的属性,以及 resolve方法来自django.core.urlresolvers获取基于 url 的实例。

代码如下:

    def get_object(self, request):
        resolved = resolve(request.path_info)
        if resolved.args:
             return self.parent_model.objects.get(pk=resolved.args[0])
        return None

然后我会调用 get_object我的formfield_from_foreignkey里面的方法方法来获取我想要用作过滤器的对象的实例。

希望对你有帮助!

关于python - Django 管理员 : Accesing the parent instance within an Inline admin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43079658/

相关文章:

python 3 : Perfect Alphabetical Order

python - 将 for 循环中的所有值返回到 django 上的模板

python - 如何在 Django 中获取登录用户的用户名?

python - 将numpy数组拆分为 block

python - 使用 setuptools/distribute 创建 python 包时是否需要 *.egg-info 目录

python - 访问字典键元组的各个元素

python - Cassandra "Unable to connect to any servers"通过 Django,而 cqlsh 可以工作

Django sorl-缩略图显示来自url的图像

Django:过滤RawQuerySet

python - Django - OneToOneField 未在管理中填充