2009-01-05 59 views
12

Tengo un modelo Pregunta con un campo llamado userid, antes de hacer una pregunta, hay que iniciar sesión, quiero guardar para capturar el ID de usuario del usuario actualmente conectado y asignarlo al ID de usuario del Modelo de pregunta.¿Cómo lleno automáticamente campos en django?

Tenga en cuenta que no se muestra 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 de preguntas (models.Model): ... identificador de usuario = models.ForeignKey (Usuario, editable = false) ...

cómo asigno ser registrados en el ID de usuario para el modelo de preguntas userid?

+0

Como nota al margen, sería más sensato y más claro llamar a su campo "usuario" en lugar de "ID de usuario"; como el atributo en realidad se refiere a un objeto Usuario, no a un número de identificación. Django creará automáticamente el campo DB con '_id' agregado; así que como lo tienes ahora es "userid_id". –

Respuesta

11

Su código puede tener este aspecto:

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

    #... 
+1

¡Gracias! Estaba a punto de publicar una pregunta similar, pero esto lo resolvió – f4nt

0

Una cosa a tener en cuenta es el hecho, que no se puede acceder al objeto de solicitud (y por lo tanto el usuario actual) de ustedes modelos sin torno a la piratería El diseño de django se restringe.

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

2

This blog entrada (por James Bennett) puede ser útil para usted también ... establece una manera de hacer casi exactamente lo que necesita.

0

Para obtener un recurso más reciente, y probablemente actualizado, recomiendo la documentación oficial de Django. Este mismo ejemplo ha hecho su camino en la sección de métodos ModelAdmin de la documentación de administración: https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#modeladmin-methods

Si eres como yo, usted tendrá la tentación de simplemente tomar ese ejemplo y correr, pero podría beneficiarse de desaceleración , tomándome unos minutos para leer y luego implementar - Ciertamente tendría ...

Tenga en cuenta que señalé a 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 asombrosos documentos son los que me están empujando a Django desde Rails!)

Cuestiones relacionadas