[英]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.