Mein models.py:Ist es möglich, zusätzliche Argumente oder Formularinstanzen an Django Formset zu übergeben?
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)
Ich möchte Form haben ähnlich wie:
--company--, --time period--
- Daten element1: - -value--, --unit--, --source--
- Daten element2: --value--, --unit--, --source--
- ...
- Daten elementN: --value--, --unit--, --source--
Mein forms.py jetzt:
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')
und Nutzung:
top_form = CompanyChainTimeForm(request.POST or None)
CompanyDataFormSet = formset_factory(CompanyDataForm, extra=X)
formset = CompanyDataFormSet()
Ist es möglich, leeres Formset zu initialisieren, dann holen Sie DataElement.objects.all() und machen Sie etwas ähnlich formset.add (CompanyDataForm (... DataElement.pk ...))
Oder was wäre die beste Option für meinen Fall?
Das Problem ist nicht Timeperiod ist eher CompamyData.data_element. Ich habe ein gemeinsames Feld für alle neuen Datensätze (CompanyTimeForm) und viele (N = Anzahl von DataElements-Datensätzen) ähnlichen Formularen, die als N CompanyData-Datensätze gespeichert werden (jeder hat die gleichen Felder von CompanyTimeForm). Aber jeder von diesen ähnlichen Formen sollte ein einzigartiges verstecktes Datenelement.pk haben, das ich an CompanyDataForm übergeben konnte (Kommentarzeichenfolgen), aber eigentlich kann ich nicht (weiß zumindest nicht wie). – Alexey