Я пытаюсь использовать вместе autocomplete_light и django-dynamic-formset: обе работают одни, но я не могу позволить им работать вместе ... давайте начнем с код ...autocomplete_light и django-dynamic-formset не работают вместе
models.py:
class Tmp_User(models.Model):
userName = models.CharField(max_length=200, blank=True, null=True,)
firstName = models.CharField(max_length=200, blank=True, null=True,)
lastName = models.CharField(max_length=200, blank=True, null=True,)
...
class Project(models.Model):
title = models.CharField()
...
class Segment_in_Project(models.Model):
name = models.CharField()
the_project = models.ForeignKey('Project')
translator = models.ForeignKey('Tmp_User')
...
forms.py
autocomplete_light.autodiscover()
class AddProjectForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(AddProjectForm, self).__init__(*args, **kwargs)
class Meta:
model = Project
fields = '__all__'
class AddSegmentForm(autocomplete_light.ModelForm):
def __init__(self, *args, **kwargs):
super(AddSegmentForm, self).__init__(*args, **kwargs)
class Meta:
model = Segment_in_Project
autocomplete_exclude = ['the_project']
fields = '__all__'
SegmentFormSet = formset_factory(AddSegmentForm)
autocomplete_light_registry.py
autocomplete_light.register(Tmp_User,
search_fields=['^firstName', 'lastName'])
и views.py
class ProjectCreateView(CreateView):
model = Project
template_name = 'home/formset-table.html'
form_class = AddProjectForm
success_url = '/admin'
def get(self, request, *args, **kwargs):
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
formset = SegmentFormSet()
return self.render_to_response(
self.get_context_data(
form_Project=form,
formset_Segment=formset))
def post(self, request, *args, **kwargs):
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
formset = SegmentFormSet(self.request.POST)
if (form.is_valid() and formset.is_valid()):
return self.form_valid(form, formset)
else:
return self.form_invalid(form, formset)
def form_valid(self, form, formset):
self.object = form.save()
self.object.save()
formset.instance = self.object
formset.save()
return super(ProjectCreateView, self).form_valid(form)
def form_invalid(self, form, formset):
return self.render_to_response(
self.get_context_data(
form_Project=form, formset_Segment=formset))
Проблема заключается в том, что formset экземпляр не «привязан» к модели проекта и проверкам не в состоянии: ошибка говорит, что the_project
не определена ... Я пытался сначала сохранить форму, получить идентификатор нового сохраненного проекта и передать его в набор форм вместе с запросом. POST, когда я объявляю набор форм ... но он не работал ...
с другой стороны вручную, используя inlineformset_factory(Project,Segment_in_Project)
вместо formset_factory
, разрывает функциональность autocomplete_light ... (я не знаю, как используйте autocomplete_light.ModelForm
для набора форм Segment_in_Project)
Любая идея или предложения о том, как это сделать? Thanks