相关疑难解决方法(0)

如何在Django管理页面中获取实际的对象ID(在formfield_for_foreignkey中)?

我已经解决了使用此代码获取对象ID的问题:

class CompanyUserInline(admin.StackedInline):
    """
    Defines tabular rules for editing company users direct in company admin
    """
    model = CompanyUser

    def formfield_for_foreignkey(self, db_field, request, **kwargs):

        if db_field.name == "user":
            users = User.objects.filter( Q(is_superuser=False) )
            query = Q()
            for u in users:
                aux = CompanyUser.objects.filter(user=u)
                if aux.count() == 0:
                    query |= Q(pk=u.id)

            try:
                cpu = CompanyUser.objects.filter(company__id=int(request.path.split('/')[4]))
                for p in cpu:
                    query |= Q(pk=p.user.id)
            except:
                pass

            kwargs["queryset"] = User.objects.filter(query).order_by('username')

        return super(CompanyUserInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
Run Code Online (Sandbox Code Playgroud)

但是,int(request.path.split('/')[4])真的很难看.我想知道如何从Django AdminModel获取id.我确定它在里面,有谁知道?

先感谢您!; d

django django-models django-admin

8
推荐指数
3
解决办法
1万
查看次数

如何在django ModelAdmin.autocomplete_fields中限制自动完成搜索结果的外键对象?

根据这个答案,我能够过滤外键选择:

在此输入图像描述

但是当我将spm标记为autocomplete_field:时autocomplete_fields = ['spm'],spm字段从选择字段变为自动完成搜索字段: 在此输入图像描述

但外键选择不再受"formfield_for_foreignkey"中配置的限制.

即使我在formfield_for_foreignkey方法中附加小部件,spm自动完成选项也会受到限制:

@admin.register(CustomModel)
class CustomModelAdmin(admin.ModelAdmin):

    #autocomplete_fields = ['spm']
    search_fields = ['name']

    def get_form(self, request, obj=None, **kwargs):
        request.current_object = obj
        return super(CustomModelAdmin, self).get_form(request, obj, **kwargs)

    def formfield_for_foreignkey(self, db_field, request, **kwargs):

        if db_field.name == 'spm':
            instance = request.current_object
            if instance.brand and instance.memory_size:
                    filtered_qs=StandardProductWithMemorySize.objects.filter(
                        product__brand=instance.brand,
                        memory_size=instance.memory_size
                    )
                    kwargs['queryset'] = filtered_qs
                    db = kwargs.get('using')
                    kwargs['widget'] = AutocompleteSelect(db_field.remote_field, self.admin_site)
        return super(
            CustomModelAdmin, self
        ).formfield_for_foreignkey(db_field, request, **kwargs)
Run Code Online (Sandbox Code Playgroud)

django django-admin

5
推荐指数
1
解决办法
817
查看次数

标签 统计

django ×2

django-admin ×2

django-models ×1