Pregunta

Tengo una pregunta modelo con un campo llamado ID de usuario , antes de hacer una pregunta, es necesario iniciar sesión, quiero guardar al capturar la ID de usuario del usuario que ha iniciado sesión y asignar Es el ID de usuario del modelo de pregunta.

Tenga en cuenta que no muestro el ID de usuario en mi formulario, es decir, en el modelo de Pregunta, he declarado el ID de usuario de la siguiente manera:

clase Pregunta (modelos.Modelo):     ...    userid = models.ForeignKey (usuario, editable = false)    ...

¿Cómo asigno el ID de usuario registrado al modelo de pregunta ID de usuario ?

¿Fue útil?

Solución

Tu código puede verse así:

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()

    #...

Otros consejos

esta entrada de blog (por James Bennett) También podría ser útil para usted ... establece una manera de hacer casi exactamente lo que necesita.

Para un recurso más reciente, y que probablemente se actualizará, recomiendo la documentación oficial de Django. Este mismo ejemplo ha llegado a la sección de métodos de ModelAdmin de la documentación del administrador: https://docs.djangoproject.com/en/1.6/ ref / contrib / admin / # modeladmin-methods

Si eres como yo, estarás tentado a tomar ese ejemplo y correr, pero podrías beneficiarte al disminuir la velocidad, tomarte unos minutos para leer y luego implementar. Sin duda, habría ...

Tenga en cuenta que señalé 1.6, pero en la esquina inferior derecha de la página hay un selector dinámico que le permite elegir su versión. (¡Estos documentos impresionantes son los que me están empujando a Django desde Rails!)

Una cosa a tener en cuenta es el hecho de que no puede acceder al objeto de solicitud (y, por lo tanto, al usuario actual) desde sus modelos sin hackear las restricciones de diseño de django.

Por lo tanto, los trucos ingeniosos como rellenar automáticamente campos como created_by y updated_by no funcionan desde Django. Debe establecer dichos campos manualmente en sus vistas, como lo ilustra @Daevaorn.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top