-
При редактировании конкретного объекта хотелось бы для одного ManyToManyField его inline-формы задать
queryset, зависящий от редактируемого объекта.
Например, есть объекты:
mark,
dealer (foreignkey(mark)),
auto (foreignkey(mark)),
advertisement (foreignkey(dealer), manytomany(auto)) - inline.
При редактировании dealer/1 в advertisement.auto должны быть auto той же mark, что и dealer/1.
Как это лучше реализовать? -
Нашел тикет, который помог решить задачу
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) -
Интересная идея... У меня похожая, но не совсем такая, задачка. Теперь примерно понятно, куда копать. Спасибо :-)
