formulaire - django formview



Formulaires en ligne Django avec plusieurs clés étrangères (1)

EDIT2: Pour faire un formulaire. Je suppose que j'aurais fait un formulaire personnalisé avec la méthode save (), quelque chose comme ça (forms.py):

class YourForm(forms.Form):
    fname = forms.CharField(label="name",max_length=70,validators=[#Choose your validators here])
    fundergrad = forms.CharField(label="fundergrad",max_length=100,validators=[#Choose your validators here])
    fundergrad_major = forms.CharField(label="fundergrad_major",max_length=80,validators=[#Choose your validators here])
    fgrad = forms.CharField(label="fgrad",max_length=100,validators=[#Choose your validators here])
    fgrad_major = forms.CharField(label="fgrad_major",max_length=80,validators=[#Choose your validators here])

    def save(self, datas):
        res = Resumes()
        res.name = datas['fname']

        undergrad = Universities()
        undergrad_major = Majors()
        grad = Universities()
        grad_major = Majors()

        undergrad.name = datas['fundergrad']
        undegrad_major.name = datas['fundergrad_major']
        grad.name = datas['fgrad']
        grad_major.name = datas['fgrad_major']

        undergrad.save()
        undergrad_major.save()
        grad.save()
        grad_major.save()

        res.undergrad = undergrad
        res.undergrad_major = undergrad_major
        res.grad = grad
        res.grad_major = grad_major

        res.save()
        return res

Dans views.py:

def formView(request) :
  if request.method == 'POST':
      form = YourForm(request.POST)
      if form.is_valid():
          datas={}
          datas['fundergrad']=form.cleaned_data['fundergrad']
          datas['fundergrad_major']=form.cleaned_data['fundergrad_major']
          datas['fgrad']=form.cleaned_data['fgrad']
          datas['fgrad_major']=form.cleaned_data['fgrad_major']

          form.save(datas)

  #Then do what you have to do in your view

EDIT1: (ne répond pas à la question, mais ça pourrait aider quelqu'un peut-être alors je le laisse ici)

J'aurais essayé avec quelque chose comme ça dans admin.py:

class UniversitiesInline1(admin.StackedInline):
  model:Universities
  fk_name = "undergrad"

class UniversitiesInline2(admin.StackedInline):
  model = Universities
  fk_name = "grad"

class MajorsInline1(admin.StackedInline):
  model = Majors
  fk_name = "undergrad_major"

class MajorsInline2(admin.StackedInline):
  model = Majors
  fk_name = "grad_major"

class ResumesAdmin(admin.ModelAdmin)
  inlines = [
    UniversitiesInline1,
    UniversitiesInline2,
    MajorsInline1,
    MajorsInline2,
  ]

admin.site.register(Resumes, ResumesAdmin)

Explications: https://docs.djangoproject.com/fr/dev/ref/contrib/admin/#working-with-a-model-with-two-or-more-foreign-keys-to-the-same-parent -modèle

J'essaie d'utiliser les formulaires ModelForm et inline de Django dans mes modèles. Cependant, je ne trouve aucune documentation qui correspond parfaitement à un modèle de base de données avec plusieurs clés étrangères dans la même table. Ce sont mes modèles:

# models.py

class Universities(models.Model):
    name = models.CharField(max_length=100)

class Majors(models.Model):
    name = models.CharField(max_length=80)

class Resumes(models.Model):
    name = models.CharField(max_length=70)
    undergrad = models.ForeignKey(Universities, related_name='undergrad_university')
    undergrad_major = models.ForeignKey(Majors, related_name='undergrad_major')
    grad = models.ForeignKey(Universities, related_name='grad_university')
    grad_major = models.ForeignKey(Majors, related_name='grad_major')

Comment puis-je faire en sorte que Django génère un formulaire pour soumettre des CV où les utilisateurs peuvent taper leur nom d'université et leur majeur? Tous les quatre seront utilisés pour créer de nouvelles entrées dans leurs bases de données respectives (2 dans les universités, 2 dans les majeures) avant d'enregistrer le nouveau CV similaire à la façon dont l' exemple de jeu de formulaires en ligne fonctionne pour une clé étrangère singulière.