Pergunta

Eu tenho uma pergunta modelo com um campo chamado ID do usuário, Antes de fazer uma pergunta, é preciso fazer login, eu quero que, ao salvar para capturar o ID do usuário do usuário logado atualmente e atribui-lo ao UserID do modelo de perguntas.

Observe que não estou mostrando o UserID no meu formulário IE no modelo de perguntas que declarei o UserID da seguinte forma;

Classe Pergunta (Models.model): ... UserID = Models.foreignKey (Usuário, Editável = Falso) ...

Como atribuo ID de usuário conectado ao modelo de perguntas ID do usuário?

Foi útil?

Solução

Seu código pode ser assim:

from django.contrib.auth.decorators import login_required

class QuestionForm(forms.ModelForm):
    class Meta:
         model = Question

@login_required
def ask(request):
    form = QuestionForm(request.POST)

    if form.is_valid():
        question = form.save(False)
        question.userid = request.user
        question.save()

    #...

Outras dicas

Este blog A entrada (de James Bennett) pode ser útil para você também ... ela estabelece uma maneira de fazer quase exatamente o que você precisa.

Para um recurso mais recente - e provavelmente atualizado -, recomendo a documentação oficial do Django. Este mesmo exemplo entrou na seção ModelAdmin Methods of the Admin Documentation:https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#modeladmin-methods

Se você é como eu, ficará tentado a pegar esse exemplo e correr, mas pode se beneficiar de desacelerar, demorando alguns minutos para ler e depois implementar - eu certamente teria ...

Observe que apontei para 1.6, mas no canto inferior direito da página é um seletor dinâmico que permite escolher sua versão. (Esses documentos incríveis são o que está me empurrando para o Django da Rails!)

Uma coisa a ter em mente é o fato de que você não pode acessar o objeto de solicitação (e, portanto, o usuário atual) de seus modelos sem invadir as restrições de design do Django.

Portanto, truques legais, como os campos automaticamente preenchidos como Create_By e Updated_By, não funcionam no Django. Você precisa definir esses campos manualmente em seus pontos de vista, conforme ilustrado por @daevaorn.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top