Es posible extender Django ModelForm
con campos adicionales. Imagine que tiene un modelo de usuario personalizada y esto ModelForm
:
class ProfileForm(forms.ModelForm):
class Meta:
model = User
fields = ['username', 'country', 'website', 'biography']
Ahora, imagine que desea incluir un campo adicional (no presente en su modelo de usuario, que permite decir un avatar imagen). Ampliar su forma de hacer esto:
from django import forms
class AvatarProfileForm(ProfileForm):
profile_avatar = forms.ImageField()
class Meta(ProfileForm.Meta):
fields = ProfileForm.Meta.fields + ('profile_avatar',)
último (dado que la forma tiene un ImageField
), recuerde incluir request.FILES
cuando una instancia de la forma en su opinión:
# (view.py)
def edit_profile(request):
...
form = AvatarProfileForm(
request.POST or None,
request.FILES or None,
instance=request.user
)
...
espero que ayude. ¡Buena suerte!
EDIT:
que era conseguir una "sólo puede concatenar tuplas (no "lista") a tupla" error en el atributo AvatarProfileForm.Meta.fields. Lo cambió a una tupla y funcionó.
Se deben agregar a la dicción de datos limpios. Por favor, publique su código de formulario, para que podamos echarle un vistazo. – gruszczy
Te aconsejo que no almacenes la información en el campo Formulario. Una solución más limpia es: almacenarlo en sesiones. – sergzach
Si el código que ha publicado en su respuesta de seguimiento es una copia exacta y pegar, entonces hay un problema de sangría con la última línea, debe ser de un nivel. –