我有一个 django auth 用户代理模型,它附加了一些额外的权限,如下所示:
class User(User):
class Meta:
proxy = True
permissions = (
("write_messages","May add new messages to front page"),
("view_maps","Can view the maps section"),
)
在模型的其他地方,我有一个以 User 作为外键的对象:
class Project(models.Model):
creation_date = models.DateTimeField(auto_now_add=True)
modify_date = models.DateTimeField(auto_now=True)
owner = models.ForeignKey(User)
在我的一种观点中,我尝试使用当前用户作为所有者来创建一个新项目
@login_required
def new_project(request):
project = Project.objects.create(owner=request.user)
然而,这会返回错误:
Cannot assign "<User: mwetter>": "Project.owner" must be a "User" instance.
我假设项目对象中的外键所有者指的是 Django User 的基类而不是我的代理类。有没有办法将我的代理用户作为外键引用?
除了 @DavidRobinson 所说的之外,您还需要小心创建代理模型的外键。代理模型仍然是它所代理的模型的子类,尽管其所有意图和目的与模型相同。如果您有代理的外键,它将不接受基类,但是基类的外键will接受代理。以下面为例。
Given:
class UserProxy(User):
class Meta:
proxy = True
...
class User(models.Model):
...
以下将引发异常:
class SomeModel(models.Model):
user = models.ForeignKey(UserProxy)
user = User.objects.get(username='some_user')
instance = SomeModel.objects.create(user=user)
但是,以下内容可以正常工作:
class SomeModel(models.Model):
user = models.ForeignKey(User)
user = UserProxy.objects.get(username='some_user')
instance = SomeModel.objects.create(user=user)
这是由于关系的方向性造成的。UserProxy
is-a User
, but User
is not a UserProxy
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)