Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 将选项限制为通用内联FK字段,具体取决于内联所关联的对象_Django_Django Models_Django Admin - Fatal编程技术网

Django 将选项限制为通用内联FK字段,具体取决于内联所关联的对象

Django 将选项限制为通用内联FK字段,具体取决于内联所关联的对象,django,django-models,django-admin,Django,Django Models,Django Admin,我试图限制在通用内联中找到的FK字段的选择,这取决于内联所附加的内容 例如,我有一篇文章,具有一个通用关系发布,与文章内联编辑 我想让PublishingLine“知道”,不知何故,它目前正在内联编辑到一篇文章中,并将可用的发布类型限制为内容\u类型文章 这是我的开始: class PublishingInlineForm(forms.ModelForm): def __init__(self, *args, **kwargs): try: d

我试图限制在通用内联中找到的FK字段的选择,这取决于内联所附加的内容

例如,我有一篇
文章
,具有一个通用关系
发布
,与
文章
内联编辑

我想让PublishingLine“知道”,不知何故,它目前正在内联编辑到一篇文章中,并将可用的发布类型限制为
内容\u类型
文章

这是我的开始:

class PublishingInlineForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):

        try:
            data = kwargs.pop("data", {})
            if kwargs["instance"]:
                publishing_type_kwargs = {
                    'content_type': kwargs["instance"].content_type, }
                data["publishing_type"] = PublishingType.objects.filter(**publishing_type_kwargs)
                kwargs["data"] = data
        except KeyError:
            pass

        super(PublishingInlineForm, self).__init__(*args, **kwargs)

class PublishingInline(generic.GenericStackedInline):

    form = PublishingInlineForm

    model = get_model('publishing', 'publishing')
    extra = 0

如果我对你的
泛型理解正确,那么InlineModelAdmin
就是你的朋友

应该采取以下措施:

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    print self.parent_model # should give you the model the inline is attached to
    if db_field.name == "publishing_type":
        kwargs["queryset"] = ... # here you can filter the selectable publishing types based on your parent model
    return super(PublishingInline, self).formfield_for_foreignkey(db_field, request, **kwargs)