1. amadev

    04.09.2008 13:49

    При редактировании конкретного объекта хотелось бы для одного ManyToManyField его inline-формы задать
    queryset, зависящий от редактируемого объекта.

    Например, есть объекты:
    mark,
    dealer (foreignkey(mark)),
    auto (foreignkey(mark)),
    advertisement (foreignkey(dealer), manytomany(auto)) - inline.
    При редактировании dealer/1 в advertisement.auto должны быть auto той же mark, что и dealer/1.

    Как это лучше реализовать?
  2. amadev

    05.09.2008 17:17

    Нашел тикет, который помог решить задачу
    http://code.djangoproject.com/ticket/3987

    Получилось:
    class AdvertisementInline(admin.StackedInline):
    model = Advertisement
    extra = 1
    form = AdvertisementForm
    def formfield_for_dbfield(self, db_field, request, **kwargs):
    field = super(AdvertisementInline, self).formfield_for_dbfield(db_field, **kwargs)
    if db_field.name == "auto":
    qs = Auto.objects.all()
    path = request.META['PATH_INFO']
    m = re.search(r"dealer/(\d+)/$", path)
    if m:
    obj = Dealer.objects.get(pk=m.group(1))
    qs = obj.auto()
    field = forms.ModelMultipleChoiceField(queryset=qs, widget=forms.CheckboxSelectMultiple);
    return field
    def get_formset(self, request, obj=None, **kwargs):
    callback = lambda f, **kwargs: self.formfield_for_dbfield(f, request, **kwargs)
    return super(AdvertisementInline, self).get_formset(request, obj, formfield_callback=callback)
  3. Иван Сагалаев

    05.09.2008 18:51

    Интересная идея... У меня похожая, но не совсем такая, задачка. Теперь примерно понятно, куда копать. Спасибо :-)

bbcode