如何限制Django raw_id_field的ForeignKey选择的选择 [英] How to limit choices of ForeignKey choices for Django raw_id_field

查看:61
本文介绍了如何限制Django raw_id_field的ForeignKey选择的选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当使用当呈现为选择框时,定义一个自定义 ModelForm ,以使用所需的选项设置该字段的queryset值.但是,使用 raw_id_fields 呈现时,此查询集似乎被完全忽略.它会生成该 ForeignKey 模型的链接,使您可以通过弹出窗口从该模型中选择任何记录.您仍然可以通过自定义URL来过滤这些值,但是我找不到通过 ModelAdmin 执行此操作的方法.

When rendered as a select box, it's simple to define a custom ModelForm to set that field's queryset value with the choices to want. However, this queryset appears to be completely ignored when rendered using raw_id_fields. It generates a link to that ForeignKey's model, allowing you to select any record from that model via a popup window. You can still filter these values by customizing the URL, but I can't find a way to do this via a ModelAdmin.

推荐答案

在Django 1.8/Python 3.4项目中,我使用类似于FSp的方法:

I use similar to FSp approach in my Django 1.8 / Python 3.4 project:

from django.contrib import admin
from django.contrib.admin import widgets
from django.contrib.admin.sites import site
from django import forms

class BlogRawIdWidget(widgets.ForeignKeyRawIdWidget):
    def url_parameters(self):
        res = super().url_parameters()
        res['type__exact'] = 'PROJ'
        return res

class ProjectAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['blog'].queryset = Blog.objects.filter(type='PROJ')
        self.fields['blog'].widget = BlogRawIdWidget(rel=Project._meta.get_field('blog').remote_field, admin_site=site)

    class Meta:
        # Django 1.8 convenience:
        fields = '__all__'
        model = Project

class ProjectAdmin(admin.ModelAdmin):
    form = ProjectAdminForm
    raw_id_fields = ('blog',)

django.admin 中仅选择 blog.type =='PROJ'作为外键 Project.blog .不幸的是,因为最终用户可能会选择任何东西.

to select only blog.type == 'PROJ' as foreign key Project.blog in django.admin. Because end-users may and will to select anything, unfortunately.

这篇关于如何限制Django raw_id_field的ForeignKey选择的选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆