我应该如何关联django models.py上的用户模型

时间:2014-12-29 21:17:54

标签: python django

我想在我的课程中添加创建的用户和修改的用户并且它给我带来了错误,我尝试了很多方法,这是我尝试的最后一次。

我使用的是正确的方法吗?

from django.db import models

from django.conf import settings

def userDefault():
return settings.AUTH_USER_MODEL

class Ambito(models.Model):
    nombre = models.CharField(max_length=150, verbose_name="Ambito")
    usuarioCreacionAmbito = models.ForeignKey(settings.AUTH_USER_MODEL,related_name="usuarioCreacionAmbito", default=userDefault)
    usuarioModificacionAmbito = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="usuarioModificacionAmbito", default=userDefault)
    fechaCreacion = models.DateTimeField(auto_now_add=True)
    fechaModificacion = models.DateTimeField(auto_now=True)
    def __str__(self):
        return u"%s" % self.nombre

class Componentes(models.Model):
    nombre = models.CharField(max_length=150)
    ambito = models.ForeignKey(Ambito)
    obligatorio = models.BooleanField(default=False)
    usuarioCreacionComponentes = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="usuarioCreacionComponentes", default=userDefault)
    #usuarioModificacionComponentes = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="usuarioModificacionComponentes", default=userDefault)
    fechaCreacion = models.DateTimeField(auto_now_add=True)
    fechaModificacion = models.DateTimeField(auto_now=True)
    def __str__(self):
        return u"%s" % self.nombre

class Caracteristicas(models.Model):
    nombre = models.CharField(max_length=200)
    componentes = models.ForeignKey(Componentes)
    usuarioCreacionCaracteristicas = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="usuarioCreacionCaracteristicas", default=userDefault)
    usuarioModificacionCaracteristicas = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="usuarioModificacionCaracteristicas", default=userDefault)
    fechaCreacion = models.DateTimeField(auto_now_add=True)
    fechaModificacion = models.DateTimeField(auto_now=True)
    def __str__(self):
        return u"%s" % self.nombre

class Verificadores(models.Model):
    nombre = models.CharField(max_length=200)
    caracteristicas = models.ForeignKey(Caracteristicas)
    usuarioCreacionVerificadores = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="usuarioCreacionVerificadores", default=userDefault)
    usuarioModificacionVerificadores = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="usuarioModificacionVerificadores", default=userDefault)
    fechaCreacion = models.DateTimeField(auto_now_add=True)
    fechaModificacion = models.DateTimeField(auto_now=True)
    def __str__(self):
        return u"%s" % self.nombre

这是错误

ValueError: invalid literal for int() with base 10: 'auth.User'

也许我解释错了,我的目标是在用户添加内容时设置用户值,我的意思是,当用户在数据库上添加行时,会自动保存添加行的用户:

如果我添加一行:

 name='Juan', last='perez' 

然后我的模型保存

 name='Juan', last='perez', user=userId

2 个答案:

答案 0 :(得分:0)

问题是您正在分配settings.AUTH_USER_MODEL(默认为' auth.User')作为外键默认值。 默认值应该是整数(相关用户模型的pk),或者可能是用户实例,但是' auth.User'是你给它的。

答案 1 :(得分:0)

您的问题出在userDefault函数的返回值中。正如suselrd所指出的那样,它是“auth.User”,它不是适合在外键中使用的值。

然而问题比你返回的值更深:Django中的不可能编写一个能够满足你想要的功能。该函数无法访问当前用户:它只能从request对象获取该函数,并且绝对无法从默认的可调用对象传递该函数。除了其他任何东西,模型可以在请求之外实例化 - 例如在shell中,或在管理命令中 - 以及“当前用户”会在那里?

设置当前用户的唯一方法是在视图中执行此操作。