tutorial tipos personalizados partir modelos formularios fields example avanzados django django-forms

tipos - Django formularios en línea con múltiples claves foráneas



formularios personalizados django (1)

Estoy tratando de usar el Modelo de Django y los formularios en línea en mis plantillas. Sin embargo, no puedo encontrar ninguna documentación que se correlacione ordenadamente con un modelo de base de datos con múltiples claves foráneas de vuelta a la misma tabla. Estos son mis modelos:

# 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'')

¿Cómo puedo hacer que Django genere un formulario para enviar curriculums vitae donde los usuarios pueden escribir el nombre y la especialización de su universidad? Los cuatro se usarían para crear nuevas entradas en sus respectivas bases de datos (2 en Universidades, 2 en Majors) antes de guardar el nuevo currículum similar a cómo funciona el ejemplo de formset en línea para una clave externa singular.


EDIT2: Para hacer una forma. Supongo que habría hecho un formulario personalizado con la anulación del método save (), algo así (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

En 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: (no responde a la pregunta, pero podría ayudar a alguien tal vez así que lo dejo aquí)

Hubiera intentado con algo como esto en 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)

Explicaciones: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#working-with-a-model-with-two-or-more-foreign-keys-to-the-same-parent -modelo