繁体   English   中英

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

[英]how should I relate user models on django models.py

我想在类中添加创建用户和修改用户,这使我犯了一个错误,我尝试了很多方法,这是我最后尝试的方法。

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

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

问题是您正在分配设置。AUTH_USER_MODEL(默认为“ auth.User”)作为您的外键默认值。 默认值应该是整数(相关User模型的pk),或者可能是User实例,但是'auth.User'是您提供的值。

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

但是问题远不止于您返回的值:在Django中, 不可能编写执行所需功能的函数。 该函数无权访问当前用户:它只能从request对象中获取该函数,并且绝对没有办法从默认可调用对象中传递该函数。 除了别的什么,模型可以在请求之外实例化(例如,在外壳程序中或在管理命令中),那么“当前用户”在那里?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM