Mon models.py:Est-il possible de passer des arguments supplémentaires ou des instances de formulaire à django formset?
class Company(models.Model):
company_name = models.CharField(max_length=255)
class TimePeriod(models.Model):
period = models.CharField(max_length=4)
class Unit(models.Model):
unit_name = models.CharField(max_length=50)
unit_type = models.CharField(max_length=50)
class DataElement(models.Model):
data_element_name = models.CharField(max_length=50)
class Source(models.Model):
source_name = models.CharField(max_length=50)
class CompanyData(models.Model):
company = models.ForeignKey(Company)
time_period = models.ForeignKey(TimePeriod)
data_element = models.ForeignKey(DataElement)
unit = models.ForeignKey(Unit)
source = models.ForeignKey(Source)
value = models.DecimalField(max_digits=15, decimal_places=2)
Je voudrais avoir une forme similaire à:
--company--, --time period--
- element1 de données: - -value--, --unit--, --source--
- données element2: --value--, --unit--, --source--
- ...
- données elementN: --value--, --unit--, --source--
Mon forms.py maintenant:
class CompanyTimeForm(ModelForm):
class Meta:
model = CompanyData
fields = ('company', 'time_period')
class CompanyDataForm(ModelForm):
# data_element = forms.IntegerField(widget=forms.HiddenInput())
# def __init__(self, extra):
# ... init data_element ...
class Meta:
model = CompanyData
fields = ('value', 'unit', 'source')
et utilisation:
top_form = CompanyChainTimeForm(request.POST or None)
CompanyDataFormSet = formset_factory(CompanyDataForm, extra=X)
formset = CompanyDataFormSet()
Est-il possible d'initialiser formset vide, puis récupérer DataElement.objects.all() et faire quelque chose de similaire à formset.add (CompanyDataForm (... DataElement.pk ...))
Ou quelle serait la meilleure option pour mon cas?
Le problème n'est pas timeperiod plutôt CompamyData.data_element. J'ai un champs communs pour tous les nouveaux enregistrements (CompanyTimeForm) et de nombreux formulaires (N = nombre d'enregistrements DataElements), qui seront enregistrés en tant que N CompanyData records (chacun aura les mêmes champs de CompanyTimeForm). Mais chacun de ces formes similaires devrait avoir caché dataelement.pk unique, que je pourrais passer à CompanyDataForm (chaînes commentées), mais en fait je ne peux pas (au moins ne sais pas comment). – Alexey