Добрый день! не получается установить initial для в последующем добавляемых formset. когда я добавляю initial он работает только, для первого formset, для остальных добавляемых, значения остаются пустыми. вот мой код. версия Django 1.8.3
models.py
class DateAccounts(models.Model):
number_accounts = models.CharField(unique=True, max_length=16,
verbose_name=u'Номер счета, акта')
name_department = models.ForeignKey('csmuser.Department',
verbose_name='Наименование отдела')
name_personal = models.ForeignKey('csmuser.UserProfile',
verbose_name=u'Представитель отдела')
date_create = models.DateTimeField(verbose_name=u'Дата создания')
name_company = models.ForeignKey(CompanyCatalog,
verbose_name='Наименование контрагента')
note = models.CharField(null=True, blank=True, max_length=255,
verbose_name='Прим.')
object_active = models.BooleanField(verbose_name=u'Статус записи',
help_text=u'Снять флаг для удаления',
default=True)
class Meta:
verbose_name = u'Счета, акты'
verbose_name_plural = u' Счета, акты'
ordering = ['-date_create']
db_table = 'dateaccounts'
def __unicode__(self):
return u'%s' % self.date_create
class ServicesAccounts(models.Model):
date_accounts = models.ForeignKey(DateAccounts,
verbose_name=u'Дата',
blank=True)
name_service = models.ForeignKey(CodeServices,
verbose_name=u'Наименование услуги',
blank=True)
cost = models.PositiveIntegerField(verbose_name=u'Стоимость единицы')
quantity = models.PositiveIntegerField(verbose_name=u'Кол-во')
sum_cost = models.PositiveIntegerField(verbose_name=u'Общая стоимость')
note = models.CharField(null=True, blank=True, max_length=255,
verbose_name='Прим.')
object_active = models.BooleanField(verbose_name=u'Статус записи',
help_text=u'Снять флаг для удаления',
default=True)
class Meta:
verbose_name = u'Виды работ и цены к счетам и актам'
verbose_name_plural = u'Виды работ и цены к счетам и актам'
ordering = ['-date_accounts']
db_table = 'serviceaccount'
def __unicode__(self):
return u'%s' % self.note
forms.py
class FormsDateAccounts(ModelForm):
def __init__(self, *args, **kwargs):
super(FormsDateAccounts, self).__init__(*args, **kwargs)
self.fields['date_create'].initial = datetime.now()
class Meta:
model = DateAccounts
fields = "__all__"
class FormServicesAccounts(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(FormServicesAccounts, self).__init__(*args, **kwargs)
self.fields['object_active'].widget=forms.HiddenInput()
class Meta:
widgets = {
'name_service': autocomplete_light.ChoiceWidget('CodeServicesAutocomplete', attrs={'size':'35'}),
}
model = ServicesAccounts
fields = "__all__"
AccountsFormSet = inlineformset_factory(
DateAccounts, ServicesAccounts,
form=FormServicesAccounts,
extra=1,
)
views.py
class CreateAccounts(CreateView):
template_name = 'accounts/forms_create.html'
model = DateAccounts
form_class = FormsDateAccounts
success_url = '/'
def get(self, request, *args, **kwargs):
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
accounts_form = AccountsFormSet(initial=[{'quantity':1}])
return self.render_to_response(
self.get_context_data(form=form,
accounts_form=accounts_form,
))
def post(self, request, *args, **kwargs):
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
accounts_form = AccountsFormSet(self.request.POST)
if form.is_valid() and accounts_form.is_valid():
return self.form_valid(form, accounts_form)
else:
return self.form_invalid(form, accounts_form)
def form_valid(self, form, accounts_form):
self.object = form.save()
accounts_form.instance = self.object
accounts = accounts_form.save()
self.object.save()
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form, accounts_form):
return self.render_to_response(
self.get_context_data(form=form,
accounts_form=accounts_form,
))
Добавляю начальные значения в views.py, таким образом
accounts_form = AccountsFormSet(initial=[{'quantity':1}])
Однако, этот способ работает только, для первого formset, для последующих добавляемых formset поле quantity остаётся пустым. Когда, я увеличиваю extra=2 в forms.py, все равно initial срабатывает только для первого formset поля quantity.
Буду признателен за любые ответы.