Acabo de comenzar a trabajar con Django después de años de Spring MVC y la implementación de formularios parece un poco loca. Si no está familiarizado, los formularios de Django comienzan con una clase de modelo de formulario que define sus campos. Spring comienza de manera similar con un objeto de respaldo de formulario. Pero donde Spring proporciona un taglib para vincular elementos de formulario al objeto de respaldo dentro de su JSP, Django tiene widgets de formulario vinculados directamente al modelo. Hay widgets predeterminados donde puede agregar atributos de estilo a sus campos para aplicar CSS o definir widgets completamente personalizados como nuevas clases. Todo va en tu código de Python. Eso me parece una locura. Primero, está poniendo información sobre su vista directamente en su modelo y, en segundo lugar, está vinculando su modelo a una vista específica. ¿Me estoy perdiendo de algo?
EDITAR: Algunos códigos de ejemplo según lo solicitado.
Django:
# Class defines the data associated with this form
class CommentForm(forms.Form):
# name is CharField and the argument tells Django to use a <input type="text">
# and add the CSS class "special" as an attribute. The kind of thing that should
# go in a template
name = forms.CharField(
widget=forms.TextInput(attrs={'class':'special'}))
url = forms.URLField()
# Again, comment is <input type="text" size="40" /> even though input box size
# is a visual design constraint and not tied to the data model
comment = forms.CharField(
widget=forms.TextInput(attrs={'size':'40'}))
Spring MVC:
public class User {
// Form class in this case is a POJO, passed to the template in the controller
private String firstName;
private String lastName;
get/setWhatever() {}
}
<!-- JSP code references an instance of type User with custom tags -->
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!-- "user" is the name assigned to a User instance -->
<form:form commandName="user">
<table>
<tr>
<td>First Name:</td>
<!-- "path" attribute sets the name field and binds to object on backend -->
<td><form:input path="firstName" class="special" /></td>
</tr>
<tr>
<td>Last Name:</td>
<td><form:input path="lastName" size="40" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Save Changes" />
</td>
</tr>
</table>
</form:form>