用django-crispy-forms更改小部件的类型

时间:2014-10-08 15:39:19

标签: python django django-forms django-views django-crispy-forms

我是Django的新手,我想使用django crispy-forms更改输入字段类型

MODEL

class Config(models.Model):
    id_proveedor = models.ForeignKey(Proveedor,db_column='id_proveedor', primary_key=True)
    d_recepcion = models.IntegerField(blank=True, null=True, verbose_name='recepcion')
    d_carga_archivo = models.IntegerField(blank=True, null=True, verbose_name='Carga de Archivo')
    d_conciliacion = models.IntegerField(blank=True, null=True, verbose_name='Conciliacion')
    d_envio_conci = models.IntegerField(blank=True, null=True, verbose_name='Envio Conciliacion')
    d_repro_completo = models.IntegerField(blank=True, null=True, verbose_name='Reproceso')
    d_acepta = models.IntegerField(blank=True, null=True, verbose_name='Aceptacion')
    d_gen_certificado = models.IntegerField(blank=True, null=True, verbose_name='Certificado')
    d_entrega_certificado = models.IntegerField(blank=True, null=True, verbose_name='Entrega Cetificado')
    class Meta:
        managed = False
        db_table = 'mpc_configuracion'

FORM
class ConfigForm(forms.ModelForm):
    def __init__(self,*args,**kwargs):
       super(ConfigForm,self).__init__(*args,**kwargs)
       self.helper = FormHelper(self)
       self.helper.layout = Layout(
            Field('id_proveedor',
                  readonly = True
             ),
            Fieldset('Configuracion Proveedor',
                     'd_recepcion',
                     'd_carga_archivo',
                     'd_conciliacion',
                     'd_envio_conciliacion',
                     'd_repro_completo',
                     'd_acepta',
                     'd_gen_certificado',
                     'd_entrega_certificado',
                     Submit('save','Grabar')
             )
       )
    class Meta:
        model = Config

VIEW(edit form view)
def configView(request):
    pk = request.GET.get('idprov')
    if request.method == 'POST':
       c = Config.objects.get(id_proveedor=pk)
       form = ConfigForm(request.POST, instance=c)
       if form.is_valid():
          form.save()
          return HttpResponseRedirect('/monitor/')
    else:
       c = Config.objects.get(id_proveedor=pk)
       form = ConfigForm(instance=c)
    return render_to_response('config.html',{'form':form},context_instance=RequestContext(request))

您可以在我的模型中看到字段id_proveedor是另一个模型的外键。当我渲染表单时,字段id_proveedor使用带有提供者名称的下拉(选择小部件)(proveedores)。在新的配置表单中看起来很好,但在编辑配置表单中,我需要在Label中显示提供程序的名称而不是select小部件。

我尝试将窗口小部件类型更改为标签,并且窗体显示id_proeedor(1,2等)的值,而不是提供者的名称,如果我将select小部件呈现为readonly,则窗口小部件始终工作,用户如果能够使用它,就像我没有使用readonly属性。

我需要在标签中的编辑配置表单中显示提供者的名称。

我不知道是否需要创建一个自定义小部件,或者有一种方法可以使用crispy-forms的帮助程序或者如果我需要更改我的视图。

请提出任何建议

感谢提前

P.D。:我的另一个模型是一个简单的模型,有两个字段“id_proveedor”(整数和主键)和“provider_name”(字符串长度= 50)

0 个答案:

没有答案