Я использую дополнительные представления django:
# views.py
from django.forms.models import inlineformset_factory
from extra_views import (CreateWithInlinesView, UpdateWithInlinesView,
InlineFormSet, )
class LinkInline(InlineFormSet):
model = Link
form = LinkForm
extra = 1
def get_form(self):
return LinkForm({})
def get_formset(self):
return inlineformset_factory(self.model, self.get_inline_model(), form=LinkForm, **self.get_factory_kwargs())
class TargetCreateView(BaseSingleClient, CreateWithInlinesView):
model = Target
form_class = TargetForm
inlines = [LinkInline, ]
template_name = 'clients/target_form.html'
Я хочу, чтобы это поле «ключевые слова» менялось в зависимости от pk, который я передаю в представление через URL-адрес.
# forms.py
class LinkForm(forms.ModelForm):
keywords = forms.ModelMultipleChoiceField(queryset=ClientKeyword.objects.filter(client__pk=1))
class Meta:
model = Link
Однако мне удалось перезаписать init формы:
У меня нет доступа к self.kwargs внутри LinkInline
Даже если бы я это сделал, я не уверен, что смогу передать созданную форму в inlineformset_factory()
from django.utils.functional import curry
MyFormset.form = staticmethod(curry(MyForm, pk=pk)) Форма должна принять kwargpk
в этом пример. - person Brandon   schedule 24.01.2013inlineformset_factory(self.model, self.get_inline_model(), form=curry(LinkForm, pk=pk), **self.get_factory_kwargs())
из get_formset(), но поскольку его там нет, я не знаю, как это будет работать. - person la_f0ka   schedule 24.01.2013