我如何基于一种形式在具有可重用功能的 2 个模型(表)中创建行
how can i create rows in 2 models(tables) with reusable functions based on one form
我想通过单个 POST 请求将数据保存在两个模型中。两种不同的模型(OF,Encours)
Here's my models.py:
class OF(models.Model):
Id_OF= models.BigAutoField(primary_key=True)
Numero_Of = models.BigIntegerField(unique=True,blank=False)
class Dimension_OF(models.TextChoices):
PD_inférieur_à_500mm="PD"
MD_Entre_500_et_1500mm="MD"
GD_supérieur_à_1500mm="GD"
Dimension_OF = models.CharField(max_length=20, blank=False,choices=Dimension_OF.choices)
class Machine(models.TextChoices):
MGP1="MGP1"
MGP2="MGP2 "
MGP3="MGP3"
MGP4="MGP4"
MGP5="MGP5"
MGP6="MGP6"
MGP7="MGP7"
MGP8="MGP8"
Machine=models.CharField(max_length=10,choices=Machine.choices, blank=False)
class Scenario(models.TextChoices):
Ajustage_Controle="scenario1"
Ajustage_Redressage_Controle="scenario2"
Ajustage_Formage_Controle="scenario3"
Ajustage_Redressage_Formage_Controle="scenario4"
Scenario = models.CharField(max_length=50,choices=Scenario.choices, blank=False)
Date_E_initial=models.DateTimeField(auto_now_add=True,auto_now=False)
Date_S_Final=models.DateTimeField(null=True, blank=True)
Etat_OF=models.CharField(max_length=50, null=True, blank=True)
Nb_jrs_att_Usin=models.DurationField(null=True, blank=True)
Nb_jrs_att_TM=models.DurationField(null=True, blank=True)
Nb_jrs_att_total=models.DurationField(null=True, blank=True)
def _str_(self):
return self.Scenario
class Encours(models.Model):
Id_encours=models.IntegerField(primary_key=True)
OF = models.ForeignKey(OF, on_delete=models.CASCADE )
class Nom_encours(models.TextChoices):
EN_MGP1="Encours MGP1"
EN_MGP2="Encours MGP2"
EN_MGP3="Encours MGP3"
EN_MGP4="Encours MGP4"
EN_MGP5="Encours MGP5"
EN_MGP6="Encours MGP6"
EN_MGP7="Encours MGP7"
EN_MGP8="Encours MGP8"
EN_AJU_GD="Encours Ajustage GD"
EN_AJU_MD="Encours Ajustage MD"
EN_AJU_PD="Encours Ajustage PD"
EN_RED="Encours Redressage"
EN_For="Encours Formage"
EN_Contr_GD="Encours Contrôle GD"
EN_Contr_MD="Encours Contrôle MD"
EN_Contr_PD="Encours Contrôle PD"
Nom_encours = models.CharField(max_length=30,choices=Nom_encours.choices)
Capacite = models.IntegerField(default=0)
Date_E_Encours=models.DateTimeField(null=True, blank=True)
Date_S_Encours=models.DateTimeField(null=True, blank=True)
def _str_(self):
return self.Nom_encours
但是在将数据保存到Encours
之前我想定义一些函数来测试字段
举个例子 ; if OF.Machine=='MGP1' 然后在 Encours
模型中创建一行 Nom_Encours='Encours MGP1'
和 Date_E_Encours = Date_E_initial
自动添加。
views.py
def lancerOF(request):
form = OFLancementForm(request.POST or None)
if request.method == 'POST':
if form.is_valid():
form.save()
messages.success(request, 'OF lancé avec succès', extra_tags='alert')
return redirect('lancer')
else:
messages.warning(request, 'Verifiez les données saisies')
return render(request, "lancerOF.html",{'form':form})
and i use a simple form
class OFLancementForm(forms.ModelForm):
class Meta:
model = OF
fields = {
'Numero_Of',
'Dimension_OF',
'Machine',
'Scenario'
}
widgets = { "Dimension_OF": forms.RadioSelect ,"Machine": forms.RadioSelect ,"Scenario": forms.RadioSelect}
如果可能的话,我可以在哪里进行测试以检查 OF 属性并将数据保存到我的模型中。
PS:这是我第一个真正的django项目。
谁能帮帮我?
def lancerOF(request):
form = OFLancementForm(request.POST or None)
if request.method == 'POST':
if form.is_valid():
myobject = form.save()
# here you can do your logic
if myobject.Machine == "MPG1":
...
messages.success(request, 'OF lancé avec succès', extra_tags='alert')
return redirect('lancer')
else:
messages.warning(request, 'Verifiez les données saisies')
return render(request, "lancerOF.html",{'form':form})
或者另一种方法是使用 Django 的 post_save
信号。
或者您可以覆盖 OF
的 save() 方法:
class OF(models.Model):
def save(self, *args, **kwargs):
super(OF, self).save(*args, **kwargs)
if self.Machine == "MPG1":
# your logic here.
我想通过单个 POST 请求将数据保存在两个模型中。两种不同的模型(OF,Encours)
Here's my models.py:
class OF(models.Model):
Id_OF= models.BigAutoField(primary_key=True)
Numero_Of = models.BigIntegerField(unique=True,blank=False)
class Dimension_OF(models.TextChoices):
PD_inférieur_à_500mm="PD"
MD_Entre_500_et_1500mm="MD"
GD_supérieur_à_1500mm="GD"
Dimension_OF = models.CharField(max_length=20, blank=False,choices=Dimension_OF.choices)
class Machine(models.TextChoices):
MGP1="MGP1"
MGP2="MGP2 "
MGP3="MGP3"
MGP4="MGP4"
MGP5="MGP5"
MGP6="MGP6"
MGP7="MGP7"
MGP8="MGP8"
Machine=models.CharField(max_length=10,choices=Machine.choices, blank=False)
class Scenario(models.TextChoices):
Ajustage_Controle="scenario1"
Ajustage_Redressage_Controle="scenario2"
Ajustage_Formage_Controle="scenario3"
Ajustage_Redressage_Formage_Controle="scenario4"
Scenario = models.CharField(max_length=50,choices=Scenario.choices, blank=False)
Date_E_initial=models.DateTimeField(auto_now_add=True,auto_now=False)
Date_S_Final=models.DateTimeField(null=True, blank=True)
Etat_OF=models.CharField(max_length=50, null=True, blank=True)
Nb_jrs_att_Usin=models.DurationField(null=True, blank=True)
Nb_jrs_att_TM=models.DurationField(null=True, blank=True)
Nb_jrs_att_total=models.DurationField(null=True, blank=True)
def _str_(self):
return self.Scenario
class Encours(models.Model):
Id_encours=models.IntegerField(primary_key=True)
OF = models.ForeignKey(OF, on_delete=models.CASCADE )
class Nom_encours(models.TextChoices):
EN_MGP1="Encours MGP1"
EN_MGP2="Encours MGP2"
EN_MGP3="Encours MGP3"
EN_MGP4="Encours MGP4"
EN_MGP5="Encours MGP5"
EN_MGP6="Encours MGP6"
EN_MGP7="Encours MGP7"
EN_MGP8="Encours MGP8"
EN_AJU_GD="Encours Ajustage GD"
EN_AJU_MD="Encours Ajustage MD"
EN_AJU_PD="Encours Ajustage PD"
EN_RED="Encours Redressage"
EN_For="Encours Formage"
EN_Contr_GD="Encours Contrôle GD"
EN_Contr_MD="Encours Contrôle MD"
EN_Contr_PD="Encours Contrôle PD"
Nom_encours = models.CharField(max_length=30,choices=Nom_encours.choices)
Capacite = models.IntegerField(default=0)
Date_E_Encours=models.DateTimeField(null=True, blank=True)
Date_S_Encours=models.DateTimeField(null=True, blank=True)
def _str_(self):
return self.Nom_encours
但是在将数据保存到Encours
之前我想定义一些函数来测试字段
举个例子 ; if OF.Machine=='MGP1' 然后在 Encours
模型中创建一行 Nom_Encours='Encours MGP1'
和 Date_E_Encours = Date_E_initial
自动添加。
views.py
def lancerOF(request):
form = OFLancementForm(request.POST or None)
if request.method == 'POST':
if form.is_valid():
form.save()
messages.success(request, 'OF lancé avec succès', extra_tags='alert')
return redirect('lancer')
else:
messages.warning(request, 'Verifiez les données saisies')
return render(request, "lancerOF.html",{'form':form})
and i use a simple form
class OFLancementForm(forms.ModelForm):
class Meta:
model = OF
fields = {
'Numero_Of',
'Dimension_OF',
'Machine',
'Scenario'
}
widgets = { "Dimension_OF": forms.RadioSelect ,"Machine": forms.RadioSelect ,"Scenario": forms.RadioSelect}
如果可能的话,我可以在哪里进行测试以检查 OF 属性并将数据保存到我的模型中。
PS:这是我第一个真正的django项目。 谁能帮帮我?
def lancerOF(request):
form = OFLancementForm(request.POST or None)
if request.method == 'POST':
if form.is_valid():
myobject = form.save()
# here you can do your logic
if myobject.Machine == "MPG1":
...
messages.success(request, 'OF lancé avec succès', extra_tags='alert')
return redirect('lancer')
else:
messages.warning(request, 'Verifiez les données saisies')
return render(request, "lancerOF.html",{'form':form})
或者另一种方法是使用 Django 的 post_save
信号。
或者您可以覆盖 OF
的 save() 方法:
class OF(models.Model):
def save(self, *args, **kwargs):
super(OF, self).save(*args, **kwargs)
if self.Machine == "MPG1":
# your logic here.