Как можно создать формы модели, которые являются подклассами формы модели в django - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу создать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...