将代理模型实例分配给外键

2024-03-27

我有一个 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(使用前将#替换为@)

将代理模型实例分配给外键 的相关文章

  • 在Python中用空格分割字符串——保留带引号的子字符串

    我有一个像这样的字符串 this is a test 我正在尝试用 Python 编写一些内容 以将其按空格分开 同时忽略引号内的空格 我正在寻找的结果是 this is a test 附言 我知道您会问 如果引号内有引号会发生什么 嗯 在
  • pandas:使用运算符链接过滤 DataFrame 的行

    大多数业务在pandas可以通过操作符链接来完成 groupby aggregate apply等 但我发现过滤行的唯一方法是通过普通的括号索引 df filtered df df column value 这没有吸引力 因为它需要我分配d
  • 在Python中将距离矩阵转换为成对距离列表[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设Python中有以下距离矩阵 0 1 2 3 0 0 1 4 8 1 1 0 3 7 2 4 3 0 3 3 8 7 3 0 我想
  • 如何在 django 表单中设置自定义 HTML 属性?

    我有一个 Django 表单 它是页面的一部分 假设我有一个字段 search input forms CharField u Search word required False 我只能通过模板访问它 form search input
  • Plotly - 不同颜色的表面

    我正在尝试在 Plotly for Python 中绘制多个曲面 每个曲面具有不同的颜色 具体来说 表面显示了在相空间中不同点采取行动的预测奖励函数 由于我在每个点都有多个可能的操作 因此每个点都是不同的表面 我想对每个表面进行独特的着色
  • 使用 selenium 在 python 中切换到弹出窗口

    如何在下面的 selenium 程序中切换到弹出窗口 我已经查找了所有可能的解决方案 但无法解决它们 请帮忙 from selenium import webdriver from splinter import Browser from
  • Python - 在先前已在全局范围内查找的函数内重新分配名称

    为什么我在下面的第三个代码中出现错误 但在前两个代码中却没有出现错误 我使用的是 Python 3 6 0 Anaconda 4 3 1 64 位 Jupyter Code 1 c 100 def fib c 20 a c print a
  • 如何让MagicMock返回多个值

    我想模拟一个图书馆 matplotlib对于它的价值 并且遇到一个问题 当调用模拟并期望返回元组时 它会失败 有一个更好的方法吗 Python 3 7 2 default Jan 13 2019 12 50 15 Clang 10 0 0
  • ctypes.ArgumentError:不知道如何转换参数

    我在C库中定义了一个函数 如下所示 int Test char str1 int id1 char str2 float val float ls 我想在Python中使用它 所以我编写了以下Python代码 str1 a str2 b i
  • 中断QThread睡眠

    我想知道如何暂停 QThread 然后在收到信号时恢复 我已阅读并知道我可以做这样的事情 def run self self ready False while not self ready self sleep 1 QtCore Slot
  • 放弃处理 无法处理视频 - Youtube API?

    我正在使用 youtube data v3 api 通过我的网站上传 mp4 视频 http post 请求如下所示 access token request session access token url https www googl
  • Django外键:获取相关模型?

    是否可以通过外键字段本身获取外键的相关模型 例如 如果我有 3 个模型 class ModelA models Model field1 models CharField max length 10 class ModelB models
  • 在 matplotlib 中分割图例

    是否有可能将一个大图例分成多个 通常是 2 个 较小的图例 from pylab import t arange 0 0 2 0 0 01 s sin 2 pi t plot t s linewidth 1 0 label Graph1 g
  • Django 自定义查询集过滤器

    在 Django 中 是否有一种标准方法可以为查询集编写复杂的自定义过滤器 就像我能写的一样 MyClass objects all filter field val 我想做这样的事情 MyClass objects all filter
  • Django:上传前调整图像大小

    我想调整图像大小 Pillow 在上传之前 我在下面编写了代码但不起作用 并得到错误 myapp list 处的属性错误 坚定的 请求方式 POST 请求网址 http 127 0 0 1 8000 myapp list http 127
  • 带参数的 Python 列表过滤

    python中有没有一种方法可以在列表上调用过滤器 其中过滤函数在调用期间绑定了许多参数 例如有没有办法做这样的事情 gt gt def foo a b c return a lt b and b lt c gt gt myList 1 2
  • 纯Python库读写jpeg格式

    伙计们 我正在寻找 jpeg 写入 阅读会很好 但不是必需的 库的纯 python 实现 我只在以下位置创建了 TonyJPEG 库端口 http mail python org pipermail image sig 2004 Novem
  • 从 s3 获取 ogg 轨道的长度而不下载整个文件

    如何在不下载整个文件的情况下获取 ogg 文件的播放长度 我知道这是可能的 因为 HTML5 标签和 VLC 都可以在加载 URL 后立即显示整个播放长度 而无需下载整个文件 有标题或我可以阅读的内容吗 也许甚至是比特率 我可以将其除以文件
  • 每次 apache 重新启动时,flask-login 会话都会被破坏

    我正在使用烧瓶登录https github com maxcountryman flask login https github com maxcountryman flask login和领域记住登录用户 http packages py
  • pylint:忽略 rcfile 中的多个

    在我的 django 项目中 我使用的是外部编写的应用程序 但编写得很糟糕 现在我想从我的 pylint 报告中忽略这个应用程序 但是我无法让 pylint 忽略它 Pylint 已经忽略了南方的迁移 如下所示 MASTER ignore

随机推荐