2017-10-26 6 views
0

私は鋼鉄酸洗プラント用のWebベースのプロセスシミュレータに取り組んでいます。 同じテンプレートに6種類のフォーム(6種類の異なるモデル)があります。同じボタンですべて送信する必要があります。ここに私の質問には関係のモデルは以下のとおりです。Djangoで可変数のフォームを提出する

class Settings(models.Model): 
    simulation = models.ForeignKey(Simulation, on_delete=models.CASCADE) 
    final_time = models.IntegerField(default=3000) 
    time_steps = models.IntegerField(default=50) 
    film_thickness = models.FloatField(default=0.001) 
    plate_thickness = models.FloatField(default=0.0005) 
    plate_width = models.FloatField(default=10.0) 
    number_of_pickling_tanks = models.PositiveSmallIntegerField(default=4) 
    number_of_rinsing_tanks = models.PositiveSmallIntegerField(default=4) 
    coil_temperature = models.FloatField(default=373.0) 
    system_pressure = models.FloatField(default=100000.0) 
    total_vaporization = models.FloatField(default=0.005) 
    plate_velocity = models.FloatField(default=3.0) 


class PicklingTank(models.Model): 
    settings = models.ForeignKey(Settings, on_delete=models.CASCADE) 
    number = models.PositiveSmallIntegerField() 
    volume = models.FloatField(default=30) 
    concentration_hcl_initial = models.FloatField(default=180.84) 
    concentration_fecl2_initial = models.FloatField(default=11.35) 
    concentration_fecl3_initial = models.FloatField(default=5.81) 
    temperature_initial = models.FloatField(default=323.15) 
    hasextinlet = models.BooleanField(default=False) 

これらのすべてが作られていますフォームは、のように:私はすでに1つのボタンで、いくつかのフォームを送信する方法についての私の研究を行ってきた

class SettingsForm(forms.ModelForm): 
    class Meta: 
     model = Settings 
     fields = '__all__' 


class PicklingTankForm(forms.ModelForm): 
    class Meta: 
     model = PicklingTank 
     fields = '__all__' 

のみ

PicklingTankFormsの数は、ユーザーがSettings.number_of_pickling_tanksで入力した値によって動的に変化します(私は、views.pyを使用してPicklingTankFormの1つのインスタンスをレンダリングし、それを "入力を使用して "JSを使用して)。

ユーザーが選択するPicklingTankFormsの数がわからない場合、Submitを押すと、PicklingTankFormごとにPicklingTankのインスタンスを1つ作成するにはどうすればよいですか?

ありがとうございました!

+0

これはまさにformsetsのためのものです。 –

答えて

0

formsetsを使用してください。

あなたはForm

from django import forms 
class PicklingTankForm(forms.Form): 
    ... 

にごModelFormを変更するなら、あなたはあなたが、その後のフォームをレンダリングするフォームセットを反復処理することができますformset

from django.forms import formset_factory 
PicklingTankFormSet = formset_factory(PicklingTankForm, 
           extra=Settings.number_of_pickling_tanks) 

でフォームのカスタム数を活用することができます。

formset = PicklingTankFormSet() 
for form in formset: 
    ... # render 
関連する問題