Estou com o mesmo problema do Gilson, quero atribuir automaticamente a
foreign key no mesmo form usando dois modelos, usei o
inlineformset_factory mas não atribui a chave .. quando eu tento
salvar diz que o campo nao pode ser nulo..
Alguém tem mais alguma dica?
On May 25, 12:14 am, Thiago Paulino <
thiagopauli...@gmail.com> wrote:
> Pessoal, na verdade ainda falta um detalhe. :/
> Eu consegui fazer tudo direitinho e tal, como já falei aqui, mas agora notei
> que faltou a parte de edição.
> Antes eu estava fazendo da seguinte forma:
>
> *urls.py*
>
> url(r'^pessoa/editar/(?P<object_id>\d+)$','django.views.generic.create_update.update_object',
> {'model':Pessoa,
> 'template_name':'generic_form.html','post_save_redirect' :
> '/pessoa/listar'}),
>
> *forms.py*
> <form action="/pessoa/editar/{{
pessoa.id}}">
> {% csrf_token %}
> <input type="submit" value="Editar"/>
> </form>
>
> Isso eu fiz seguindo o tutorial do site do Django, mas ele exibe o form
> genérico. No meu caso, ele exibe os campos de contato e de endereco como
> dois combobox. Queria usar o form da mesma forma usado no cadastro.
> O que devo alterar no meu código? Valeu.
>
> > Postei o código Django aqui:
http://pastebin.com/DbQUZtSYe o formulário
> > Em 24 de maio de 2011 00:42, Fabricio Mattos <
fabrim...@gmail.com>escreveu:
>
> > Ola Thiago,
>
> >> teria como vc postar como ficou o codigo.
>
> >> Estou tentando fazer isso aqui e estava acompanhando essa thread tentando
> >> fazer o que o pessoal escreveu, mas ainda não consegui salvar no banco .
>
> >> Att
>
> >> Fabricio
>
> >> Em 23 de maio de 2011 22:46, Thiago Paulino <
thiagopauli...@gmail.com>escreveu:
>
> >> Acabei de conseguir. o/
> >>> Mas confesso que não foi muito trivial. Achei que o django facilitaria
> >>> pra mim. hehe
> >>> É preciso salvar os objetos "de baixo pra cima", digo, primeiro os que
> >>> não tem foreign key, depois os que tem, enfim...
> >>> O importante é que consegui salvar o danado do objeto.
> >>> Obrigado pela ajuda de vocês.
>
> >>> Em 23 de maio de 2011 21:23, Rodrigo Chacon <
rocha...@gmail.com>escreveu:
>
> >>> Para pegar todas a variáveis locais da sua view para passar como
> >>>> contexto, use: locals(). Mas quase sempre você vai passar variáveis extras,
> >>>> desnecessárias para seu template, mantenha-se especificando cada uma.
>
> >>>> Para a dúvida dos forms, tem bastante coisa aqui:
> >>>>
http://lmgtfy.com/?q=django+form+two+models
>
> >>>> -- Rodrigo Chacon
>
> >>>> Em 23 de maio de 2011 20:36, Thiago Paulino <
thiagopauli...@gmail.com>escreveu:
>
> >>>> E outra coisa, ao invés de eu especificar cada campo, não tem como eu
> >>>>> dizer "pegue todos os campos"?
> >>>>> Já to me descabelando por causa disso. hehe
>
> >>>>> Em 23 de maio de 2011 19:34, Thiago Paulino <
thiagopauli...@gmail.com>escreveu:
>
> >>>>> Ainda não consegui fazer o cadastro. :/
> >>>>>> Como disse, eu tenho uma classe Pessoa que tem uma foreign key para
> >>>>>> Endereco e outra para Contato.
>
> >>>>>> Meu código ficou da seguinte forma:
> >>>>>> *forms.py*
> >>>>>> class CadastroPessoaForm(forms.Form):
> >>>>>> pessoa_nome = forms.CharField()
> >>>>>> contato_email = forms.CharField()
> >>>>>> endereco_cep = forms.CharField()
>
> >>>>>> def save(self):
> >>>>>> contato =
> >>>>>> Contato.objects.create(email=self.cleaned_data['contato_email'])
> >>>>>> endereco =
> >>>>>> Endereco.objects.create(cep=self.cleaned_data['endereco_cep'])
> >>>>>> pessoa = Pessoa.objects.create(contato=contato,
> >>>>>> endereco=endereco, nome=self.cleaned_data['pessoa_nome'])
>
> >>>>>> *urls.py*
>
> >>>>>> url(r'^pessoa/cadastrar$','DjangoProject1.public.views.cadastro_pessoa'),
>
> >>>>>> *views.py*
> >>>>>> def cadastro_pessoa(request):
> >>>>>> campos = CadastroPessoaForm(request.POST)
> >>>>>> return render_to_response('generic_form.html',{'form':campos},
> >>>>>> context_instance=RequestContext(request))
>
> >>>>>> Quando eu entro pela url pessoa/cadastrar ele até exibe os campos
> >>>>>> pessoa_nome, contato_email e endereco_cep, que eu coloquei no
> >>>>>> CadastroPessoaForm, mas quando clico no botão cadastrar nada acontece.
> >>>>>> Acredito que eu não esteja fazendo a chamada para o método save(), como faço
> >>>>>> isso?
> >>>>>> Alguém teria aí um exemplo completo já pronto de uma situação parecida
> >>>>>> com a minha? Iria ser de grande ajuda.
>
> >>>>>> Em 23 de maio de 2011 11:08, Ernesto Guevara <
eguevara2...@gmail.com>escreveu:
>
> >>>>>> Lembrando que para usar inline, a classe que será instanciada no form
> >>>>>>> inline e que será injetado no form principal precisa estar anotada com
> >>>>>>> ForeignKey. senão vai dar erro.
> >>>>>>> Abraço!
>
> >>>>>>> Em 23 de maio de 2011 08:46, Guilherme Kuhn <
g.ku...@gmail.com>escreveu:
>
> >>>>>>> Gilson, creio que seria um inline_formset [1] o que você busca. É bem
> >>>>>>>> simples de fazer e você pode customizar totalmente os forms de cada model. É
> >>>>>>>> desta forma que o admin faz os inlines, porém pode fazer fora do admin
> >>>>>>>> tranquilamente.
>
> >>>>>>>> [1] -
> >>>>>>>>
http://docs.djangoproject.com/en/1.3/topics/forms/modelforms/#inline-...
>
> >>>>>>>> Em 23 de maio de 2011 02:57, Rodrigo Chacon <
rocha...@gmail.com>escreveu:
>
> >>>>>>>> Thiago, é boa prática deixar seus forms em um arquivo forms.py
> >>>>>>>>> dentro do seu app.
>
> >>>>>>>>> -- Rodrigo Chacon
>
> >>>>>>>>> Em 21 de maio de 2011 18:17, danilo silva dos santo <
> >>>>>>>>>
danilo...@gmail.com> escreveu:
>
> >>>>>>>>> formWirzard ?
>
> >>>>>>>>>> Em 21 de maio de 2011 11:14, Thiago Paulino <
> >>>>>>>>>>
thiagopauli...@gmail.com> escreveu:
>
> >>>>>>>>>> Rodrigo, eu teria que declarar essa classe CadastroForm no
> >>>>>>>>>>> models.py também? Se sim, não teria como deixar separado pra organizar
> >>>>>>>>>>> melhor?
>
> >>>>>>>>>>> Em 21 de maio de 2011 00:04, Rodrigo Chacon <
rocha...@gmail.com>escreveu:
>
> >>>>>>>>>>> Não seria mais fácil criar um form simples que receba somentes os
> >>>>>>>>>>>> campos necessários e criar neste form um método save que faça o trabalho de
> >>>>>>>>>>>> salvar e linkar?
>
> >>>>>>>>>>>> Vou tentar usar o caso do Gilson para tentar exemplificar, dado
> >>>>>>>>>>>> que ele não usa o admin e *este método não se aplica ao admin*:
>
> >>>>>>>>>>>> Models: User, Fornecedor
>
> >>>>>>>>>>>> Form:
> >>>>>>>>>>>> class CadastroForm(forms.Form):
> >>>>>>>>>>>> usuario = forms.CharField()
> >>>>>>>>>>>> nome_fornecedor = forms.CharField()
>
> >>>>>>>>>>>> def save(self):
> >>>>>>>>>>>> user =
> >>>>>>>>>>>> User.objects.create(username=self.cleaned_data['usuario'])
> >>>>>>>>>>>> fornecedor = Fornecedor.objects.create(user=user,
> >>>>>>>>>>>> nome=self.cleaned_data['nome_fornecedor'])
>
> >>>>>>>>>>>> View:
> >>>>>>>>>>>> def view(request):
> >>>>>>>>>>>> form = CadastroForm(request.POST)
> >>>>>>>>>>>> # etc...
>
> >>>>>>>>>>>> O Django não disponibiliza somente os ModelForm's, então não
> >>>>>>>>>>>> fiquem presos a eles. =D
> >>>>>>>>>>>> Neste caso, você consegue cadastrar ambos os modelos em um único
> >>>>>>>>>>>> form, tratando validação erros e tudo o mais que precisar.
>
> >>>>>>>>>>>> -- Rodrigo Chacon
>
> >>>>>>>>>>>> Em 19 de maio de 2011 20:01, Ernesto Guevara <
> >>>>>>>>>>>>
eguevara2...@gmail.com> escreveu:
>
> >>>>>>>>>>>> Olá!
> >>>>>>>>>>>>> Não ficou claro pra mim essa parte de passar campos de A para
> >>>>>>>>>>>>> B.
> >>>>>>>>>>>>> Se o que vc quer é embutir o form de A em B, na existência de
> >>>>>>>>>>>>> relacionamentos, o Django cria um select (combobox) do modelo relacionado
> >>>>>>>>>>>>> automaticamente e não um form. Eu tb já tive essa necessidade mas não
> >>>>>>>>>>>>> encontrei a resposta por enquanto.
> >>>>>>>>>>>>> Me disseram que deveria alterar o widget, mas não deu certo,
> >>>>>>>>>>>>> então eu excluo o relacionado no forms.py e instancio dois forms na
> >>>>>>>>>>>>> views.py, para ter assim um form abaixo do outro.
> >>>>>>>>>>>>> Abraço!
>
> >>>>>>>>>>>>> Em 19 de maio de 2011 17:47,
contatogilson...@gmail.com <
> >>>>>>>>>>>>>
contatogilson...@gmail.com> escreveu:
>
> >>>>>>>>>>>>> Olá pessoal,
>
> >>>>>>>>>>>>>> Eu estou com uma dúvida aqui. Tem como eu criar um formulário
> >>>>>>>>>>>>>> a partir do ModelForm com dois modelos de dados? Por exemplo:
>
> >>>>>>>>>>>>>> - Modelo B tem um campo que é uma chave estrangeira do Modelo
> >>>>>>>>>>>>>> A;
>
> >>>>>>>>>>>>>> Com isso eu queria passar todos os campos do Modelo A para
> >>>>>>>>>>>>>> preencher mais os do Modelo B.
>
> >>>>>>>>>>>>>> Tem como fazer isso?
> >>>>>>>>>>>>>> _____________________________________________
> >>>>>>>>>>>>>> *Gilson Filho*
> >>>>>>>>>>>>>> *Web Developer
> >>>>>>>>>>>>>>
http://gilsondev.com*
> >>>>>>>>>>> *Thiago P.
> >>>>>>>>>>> Graduando em Sistemas p/ Internet - IFPB
> >>>>>>>>>>> Pós-graduando em Desenv. p/ Dispositivos móveis - FatecJP
>
> ...
>
> read more »