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