Ограничение выбора полем Generic Inline FK в зависимости от объекта, с которым связан Inline - PullRequest
3 голосов
/ 03 июня 2011

Я пытаюсь ограничить выбор поля FK, найденного в общей строке, в зависимости от того, к чему присоединена строка.

Например, у меня есть Article, с родовым отношением Publishing, отредактировано inline с Article.

. Я бы хотел, чтобы PublishingInline каким-то образом «знал», что он в настоящее время редактируется inline для статьи, и ограничивает доступные PublishingTypes content_typeArticle.

Это начало, которое я сделал:

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

1 Ответ

2 голосов
/ 03 июня 2011

Если я вас правильно понимаю formfield_for_foreignkey на вашем GenericInlineModelAdmin ваш друг.

Что-то вроде этого должно сделать это:

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)
...