validar por personalizados pasar parametros formularios formulario form boton avanzados python django django-forms create-view

python - por - Django CreateView personaliza el campo predeterminado del formulario en función del parámetro url



post django (1)

archivo: Capacity / models.py

class Env(models.Model): name = models.CharField(max_length=50) def get_absolute_url(self): return reverse(''index'') class Envhosts(models.Model): env = models.ForeignKey(Env) hostname = models.CharField(max_length=50) count = models.IntegerField() class Meta: unique_together = ("env","hostname") def get_absolute_url(self): return reverse(''index'')

archivo: Capacity / views.py

class EnvhostsCreate(CreateView): model = Capacity.models.Envhosts fields=[''env'',''hostname'',''count''] template_name_suffix = ''_create_form''

archivo Capacity / urls.py:

urlpatterns = patterns(........ url(r''^createhosts/(?P<envid>/d+)/$'',EnvhostsCreate.as_view(),name=''envhosts_create''))

Así que ahora, cuando abro este formulario: /Capacity/createhosts/3/ (donde 3 es mi env id) Muestra una opción de objetos env como una lista desplegable basada en el número de objetos de Env. Pero quiero que tome el env por sí mismo basado en el env id (''3'' en este caso)

Sé que tengo que anular algún método en la clase EnvhostsCreate (CreateView). Pero soy incapaz de averiguar qué método y cómo tomar el env basado en la parte posterior /createhosts/


Puede usar el patrón descrito en la documentación para agregar request.user: es el mismo principio. Elimine env de la lista de campos, luego defina form_valid() :

class EnvhostsCreate(CreateView): model = Capacity.models.Envhosts fields = [''hostname'', ''count''] template_name_suffix = ''_create_form'' def form_valid(self, form): form.instance.env = Envhosts.objects.get(pk=self.kwargs[''envid'']) return super(EnvhostsCreate, self).form_valid(form)