Я хочу создать modelForm, которая зависит от модели с именем Project, и эта модель имеет два типа полей. Первая часть полей описывает характеристики проекта, а другая часть должна быть взята из каталога, имя которого - riskCatalogue. У меня есть некоторые вопросы по поводу создания проекта modelForm.
1- Поля riskCatalogue должны иметь закрытый ключ или идентификатор.
2- У каждого поля riskCatalogue есть несколько полей, которые находятся в fieldSet.
Итак, мой вопрос, как я могу создать Project modelForm. Когда я хочу создать проект, я могу отредактировать все поля элементов проекта, кроме полей riskCatalogue проекта, и я не могу дать идентификатор для полей riskCatalogue.
models.py
class fieldSet(models.Model):
riskEvent = models.CharField(max_length=100,verbose_name='Risk Event')
impact = models.IntegerField(editable=True,verbose_name='Impact')
probability = models.IntegerField(editable=True,verbose_name='Probability')
effect = models.IntegerField(editable=True,verbose_name='Risk Effect')
description = models.CharField(max_length=200,editable=True,verbose_name='Description')
responcive = models.CharField(max_length=100, choices=payType,verbose_name='Responcible')
class riskCatalogue(models.Model):
# risk catalogue and risks' id
War = models.OneToOneField(War,editable=True,on_delete=models.CASCADE,verbose_name='War')
Revolution = models.OneToOneField(Revolution,editable=True,on_delete=models.CASCADE, verbose_name='Revolution')
CivilDisorders = models.OneToOneField(CivilDisorders,editable=True,on_delete=models.CASCADE, verbose_name='Civil Disorders')
...
class Project(models.Model):
projectName = models.CharField(max_length=120,verbose_name='Project Name')
summary = models.TextField(verbose_name='Summary')
crtDate = models.DateTimeField('Creating Date',auto_now_add=True)
# project features
prjType = models.CharField(max_length=50, choices=types,verbose_name='Project Type')
prjCountry = models.CharField(max_length=100, choices=countries,verbose_name='Country')
...
prjRisks = models.OneToOneField(riskCatalogue,on_delete=models.CASCADE)
forms.py
class featureForm(forms.ModelForm):
class Meta:
model = Project
fields = ['projectName','summary','prjType','prjCountry', 'dlvSystem', 'cost', 'duration','area','payment','complexity','compLevel','consLevel',
'qltyDsgn','complCons','AccesSite','geotech','climate','strQuality','strEnv','strSafe','strPrjct','vaguenes','avConsErr',]
class fieldSetForm(forms.ModelForm):
class Meta:
model = fieldSet
fields = ['riskEvent', 'impact', 'probability', 'effect', 'strategy', 'description', 'responcive', ]
class riskForm(forms.ModelForm):
class Meta:
model = riskCatalogue
fields = ['War','Revolution','CivilDisorders','InconsistencyOfGovernmentalPolicies','GNPDecreases','IncompatibleGNPPerCapita','InterestRateFluctuation',
'InflationRateIncreasing','CurrencyExchangeRateFluctuation','TaxRateIncreasing','LanguageBarrier','ReligiousInconsistency','CultureTraditionDifferences',
'InsecurityAndCrime','Pestilence','BribeAndCorruption','PopularInInformalRelationships','LackOfPublicSupport','Brotherhood',
'DemandingDecreasing','StructureChanges','IncompatibleArbitrationSystem','ComplexPlanningApprovalAndPermitProcedures','ImportExportRestrictions',]
views.py
def projectCreate(request):
form = Form(request.POST or None)
if form.is_valid():
form2 = riskForm(request.POST or None)
if form2.is_valid():
risk = form2.save()
project = form.save(commit=False)
project.prjRisks = risk
context = {
'form': form2
}
return render(request, 'projects/update.html', context)
return HttpResponseRedirect(reverse('projects:view', kwargs={'id': project.id}))
context = {
'form':form,
}
return render(request, 'projects/create.html',context)