在 Django 中设置外键属性的默认值

2023-12-23

为模型中的外键字段设置默认值的最佳方法是什么?假设我有两个模型,Student and Exam与学生有exam_taken作为外键。理想情况下我该如何为其设置默认值?这是我的努力日志

class Student(models.Model):
   ....
   .....
   exam_taken = models.ForeignKey("Exam", default=1)

可行,但有预感有更好的方法。

def get_exam():
    return Exam.objects.get(id=1)
    
class Student(models.Model):
    ....
    .....
    exam_taken = models.ForeignKey("Exam", default=get_exam)

但这会失败,并在同步时出现表不存在错误。

任何帮助,将不胜感激。


正如@gareth 中已经暗示的那样answer https://stackoverflow.com/a/9312738,硬编码默认值id价值可能并不总是最好的主意:

If the id数据库中不存在该值,您有麻烦了。即使具体的id值确实存在,对应的对象可能会改变。无论如何,当使用硬编码时id值,您必须诉诸数据迁移或手动编辑现有数据库内容之类的方法。

为了防止这种情况,你可以使用获取或创建() https://docs.djangoproject.com/en/3.0/ref/models/querysets/#get-or-create结合一个unique字段(除id).

这是一种方法:

from django.db import models

 
class Exam(models.Model):
    title = models.CharField(max_length=255, unique=True)
    description = models.CharField(max_length=255)
    
    @classmethod
    def get_default_pk(cls):
        exam, created = cls.objects.get_or_create(
            title='default exam', 
            defaults=dict(description='this is not an exam'),
        )
        return exam.pk
    
    
class Student(models.Model):
    exam_taken = models.ForeignKey(
        to=Exam, on_delete=models.CASCADE, default=Exam.get_default_pk
    )

Here an Exam.title字段用于获取唯一的对象,以及Exam.description字段说明了我们如何使用defaults论证(对于get_or_create) 完全指定默认值Exam object.

请注意,我们返回一个pk,正如建议的docs https://docs.djangoproject.com/en/3.0/ref/models/fields/#default:

对于像这样的领域ForeignKey映射到模型实例,默认值应该是它们引用的字段的值(pk unless to_field已设置)而不是模型实例。

另请注意default可调用对象的评估在Model.__init__() (source https://github.com/django/django/blob/stable/3.0.x/django/db/models/base.py#L474)。因此,如果您的默认值取决于同一模型的另一个字段,或者请求上下文,或者客户端表单的状态,您可能应该看看别处 https://stackoverflow.com/a/1969081.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Django 中设置外键属性的默认值 的相关文章

  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 如何在 success_url 中传递上下文数据?

    我制作了一个表单 我希望再次返回相同的表单 这次使用可在我的模板中使用的上下文数据来显示表单已成功发送 我怎样才能做到这一点 class ContactUsView FormView form class ContactUsForm tem
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 将文件夹和文件结构从 django 1.3 迁移到 django 1.4 的最佳方法是什么?

    我有一个使用 django1 3 创建的小项目 我想将其迁移到 django1 4 但由于文件结构发生了一些变化 最好的迁移方法是什么 Read https docs djangoproject com en dev releases 1
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 为什么当我运行“python manage.pysyncdb --all”时会出现此错误?

    我正在尝试应用教程http docs django cms org en 2 1 3 getting started tutorial html http docs django cms org en 2 1 3 getting start
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐

  • 将 ../ 与 docker-compose 卷一起使用时会发生什么

    我在将文件从 docker 容器内写入主机时遇到问题 我相信这是一个特权问题并且不想设置privileged True 写出文件的解决方法是预先挂起 到我的一卷docker compose yml文件 例如 version 3 servic
  • 了解 VS2010 C# 并行分析结果

    我有一个包含许多独立计算的程序 因此我决定对其进行并行化 我使用 Parallel For Each 对于双核机器来说 结果还不错 大多数时候 CPU 利用率约为 80 90 然而 对于双 Xeon 机器 即 8 核 我只能获得大约 30
  • 延迟 SwiftUI 中的转换

    如何延迟过渡 我想单击一个按钮 然后视图应该延迟转换 我有以下代码 但它没有正确同步 struct ContentView View State var showOne true var body some View VStack if s
  • 调整 UILabel 的大小以适应插图

    我正在构建一个屏幕来扫描条形码 并且我需要在一些屏幕后面放置一个半透明屏幕UILabels以提高浅色背景下的可见度 现在屏幕如下所示 我正在设置背景颜色UILabel得到半透明的盒子 我还创建了一个自定义UILabel子类允许我在边缘之间设
  • 如何知道 S3 存储桶中存储了多少个对象?

    除非我遗漏了什么 否则我看过的 API 似乎都不会告诉你一个对象中有多少个对象
  • Monotouch打开文档-UIDocumentInterationController

    我想在我的 iPhone 应用程序上打开一个用 Monotouch 编写的文档 即在默认 PDF 查看器中启动 PDF 文件 我想我应该使用 UIDocumentInteractionController 任何人对此有任何想法 我已将以下内
  • 生成带有日期的随机时间序列数据

    我正在尝试生成带有日期的随机数据 整数 以便我可以在其上练习 pandas 数据分析命令并绘制时间序列图 temp depth acceleration 2019 01 1 0 218062 1 215978 1 674843 2019 0
  • Russell Libby 的 Pipes 组件

    有谁知道哪里可以下载 Russell Libby 的命名管道 成分 我能找到的所有链接都指向 http home roadrunner com rllibby source html http home roadrunner com rll
  • 在 htaccess 重写规则中附加秘密令牌作为查询字符串有多安全?

    我在尝试提供答案时做了一些测试mod rewrite 重定向但阻止直接访问 https stackoverflow com questions 45326795 mod rewrite redirect but prevent direct
  • 使用 CMake 和 conan 包管理器正确设置 Vulkan、glfw 和 spdlog

    我正在开发 Vulkan API 的渲染器 我在使用 CMake 和 conan 包管理器正确设置项目时遇到了很大的麻烦 让我们看一下我的 conanfile py 的依赖设置 from conans import ConanFile CM
  • 如何在Java中unpickle文件?

    我有一个由 Python 进程创建的 pickle 格式数据文件 实际上是 MCDungeon 缓存文件 我想从 Java 程序中读取此内容 为此 我使用了以下代码 public HashMap
  • 带图像的网格布局

    我正在尝试使用 HTML 和 CSS 为图像构建此网格布局 我想使用 div 而不是 table 但我不确定最好的方法是什么 我还需要在每张图片下面添加一个简短的描述 我使用浮动和padding bottom 底部填充用于模拟元素的高度 这
  • 在卸载之前将 AJAX 发送到服务器 [重复]

    这个问题在这里已经有答案了 所以据说从 Firefox gt 4 开始 https stackoverflow com questions 5398772 firefox 4 onbeforeunload custom message 将窗
  • 我需要帮助解码,这是 json 吗?

    这是json吗 我需要从中回显某些信息 但执行起来遇到困难 我尝试过json decode 但似乎不起作用 a 4 s 5 entry a 1 s 4 type s 10 individual s 5 group a 1 s 6 famil
  • 将二维数组分割成更小的二维数组

    有没有办法将 numpy 中的二维数组分割成更小的二维数组 Example 1 2 3 4 gt 1 2 3 4 5 6 7 8 5 6 7 8 所以我基本上想把一个 2x4 数组切成 2 个 2x2 数组 寻找用于图像的通用解决方案 有另
  • 根据另一列将值映射到特定列

    我有以下问题 A DataFrame含有col1带字符串A B or C 一秒col2与Integer 以及其他三栏col3 col4 and col5 这些列也被命名为A B and C Thus col1 col2 A col3 B c
  • 工作空间和工作目录是什么关系

    我一直在阅读有关 Perforce 的内容 但没有找到任何关于工作空间和工作目录之间关系的全面解释 例如文件如何出现在工作区的工作目录中 如何跟踪它们 工作区文件和工作目录文件之间可能存在哪些不一致等 我来自git背景 所以我正在寻找类似于
  • 子进程退出后内核复制 CoW 页面

    在Linux中 每当一个进程被fork时 父进程的内存映射都是cloned进入子进程 实际上 出于性能原因 页面被设置为写时复制 最初它们是共享的 如果两个进程之一在其中一个进程上写入 那么它们将被共享cloned MAP PRIVATE
  • 如何获取 WooCommerce 中的可用税率

    基于使用 WC Tax get tax classes 获取所有 WooCommerce 税级 https stackoverflow com questions 66196547 using wc taxget tax classes t
  • 在 Django 中设置外键属性的默认值

    为模型中的外键字段设置默认值的最佳方法是什么 假设我有两个模型 Student and Exam与学生有exam taken作为外键 理想情况下我该如何为其设置默认值 这是我的努力日志 class Student models Model