Django 装置使用默认值保存

2024-03-01

我正在使用 Django 1.7,但我的装置有问题。

我希望 Django 使用默认值或使用save()方法来创建未指定的值。

这是我当前的对象:

# File: uuidable.py
import uuid
from django.db import models
from django.utils.translation import ugettext_lazy as _


class Uuidable(models.Model):
    uuid = models.CharField(_('uuid'), blank=True,
                            null=False, unique=True,
                            max_length=64, default=uuid.uuid4())  # Tried here

    class Meta:
        abstract = True

    def save(self, *args, **kwargs):
        if self.pk is None:
            self.uuid = uuid.uuid4()  # Tried here also
        super().save(*args, **kwargs)

# File: timestampable.py
from django.db import models
from django.utils.translation import ugettext_lazy as _


class Timestampable(models.Model):
    created_at = models.DateTimeField(_('created at'), auto_now_add=True)
    updated_at = models.DateTimeField(_('updated at'), auto_now=True)

    class Meta:
        abstract = True

# File: post.py
from project.lib.models.timestampable import Timestampable
from project.lib.models.uuidable import Uuidable

class Post(Timestampable, Uuidable):
    title = models.CharField(_('title'), max_length=250, blank=False)
    content = models.TextField(_('content'))

    def __str__(self):
        return self.title

正如你所看到的,当我生成一个新的Post(), the created_at, updated_at and uuid值自动创建于save()。但是当我使用固定装置时,我收到以下错误:

[...]initial_data.yaml': Could not load post.Post(pk=None): UNIQUE constraint failed: post_post.uuid

如果我指定一个uuid在我的装置文件中,然后我收到错误created_at然后继续updated_at。所以我必须指定每个字段的内容,即使我希望它是“自动的”。

来自文档 https://docs.djangoproject.com/en/1.7/ref/django-admin/(为什么这是在 django 中admin文档?!),我知道save()方法没有被调用,所以这就是为什么我将所有内容放入save()方法不起作用。但不应该是default or auto_now*启用/使用功能?

处理夹具文件时,数据按原样保存到数据库中。不会调用模型定义的 save() 方法,并且将使用 raw=True 调用任何 pre_save 或 post_save 信号,因为实例仅包含模型本地的属性。例如,您可能想要禁用访问夹具加载期间不存在的相关字段的处理程序,否则会引发异常

有没有办法“强制”Django 自动使用default or auto_now*灯具的特点 ?我在用着manage.py syncdb创建所有表等。

我在谷歌和堆栈溢出上进行了搜索,但似乎找不到正确的搜索关键字。

UPDATE-1: 下列谷歌小组讨论 https://groups.google.com/forum/#!topic/django-users/Zfqx-kEE2uY说对象保存在raw模式,意味着auto_now*不考虑特征。我仍在寻找是否有办法将某些模型函数挂接到 Django 固定装置保存中。


解决方案是使用 django 信号:

import uuid
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.db.models.signals import pre_save
from django.dispatch import receiver

class Uuidable(models.Model):
    uuid = models.CharField(_('uuid'), blank=True,
                            null=False, unique=True,
                            max_length=64, default=uuid.uuid4())

    class Meta:
        abstract = True

    @receiver(pre_save)
    def set_uuid_on_save(sender, instance, *args, **kwargs):
        if instance.pk is None:
            instance.uuid = uuid.uuid4()

这样,无论您以何种方式创建模型(通过 shell、装置等),模型/数据都会被填充。

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

Django 装置使用默认值保存 的相关文章

随机推荐

  • 矩阵和算法“螺旋”

    我想问是否有一些算法准备好 允许我这样做 我有一个矩阵 m 列 x n 行 其中有 m x n 元素 我想给这个元素从中心开始并以螺旋形式旋转的位置 例如 对于 3x3 的矩阵 我有 9 个这样定义的元素 5 6 7 4 9 8 3 2 1
  • 如何从 CodeIgniter 内部访问标准 PHP 会话数据

    我正在开发一个 Codeigniter 项目 并使用 CI 会话 存储在数据库中 但我需要检查另一个应用程序 在同一个 cookie 域中 的另一个 SESSION 中的变量 但是当我尝试从 CI 控制器使用本机 PHP 会话来获取这一点信
  • Base X 字符串编码

    我正在寻找一个例程 将字符串 字节流 编码为任意基本 字母表 如base64编码 但我可以选择字母表 我见过一些例程对数字进行基本 X 编码 但不对字符串进行基本 X 编码 这是我的BaseX BaseN 编码算法的实现 https git
  • 使用模型工厂、一对一和一对多关系定义 Laravel 外键,无需创建不必要的模型

    最近 我一直在尝试通过 Model Factories 和 Faker 使用 Laravel 播种来为我的数据库播种 对于简单的模式 让它工作是轻而易举的 然而 我在处理复杂的数据库模式时遇到了几个问题 其中涉及外键和表关系 一对一 一对多
  • 安装 reflex-dom 可能会破坏 ghcjs

    我正在尝试安装reflex and reflex dom using cabal install我收到以下错误消息 cabal install reflex dom cabal The following packages are like
  • 确定查询是否在 vb.net 中返回“无行”

    我使用 MS SQL Server 作为数据库 使用 VB NET 作为后端 我想确定 sql 命令文本中的查询是否不返回任何行 我尝试有一个不返回任何行的查询 然后将其值赋给一个文本框 该文本框变为 0 整数 现在的问题是 当我在一个如果
  • 节能器启用和禁用后后台服务停止

    我有一个应用程序 在其中我在后台执行一些任务 因此 如果我的后台服务正在运行 该任务就会执行 问题 当我启用和禁用省电程序时 它会关闭所有内容并停止正在运行的每个后台服务 关闭省电程序后 直到我打开应用程序后 服务才开始启动 那么 对于低于
  • 何时使用 Apache 与 Apache+Tomcat?

    既然简单地使用 Apache 就足以运行许多 Web 应用程序 那么除了 Apache 之外 人们何时以及为何还使用 Tomcat 阿帕奇雄猫 http tomcat apache org是 Web 服务器和 Java servlet 容器
  • 如何改进这个平方根方法?

    我知道这听起来像是一项家庭作业 但事实并非如此 最近我对用于执行某些数学运算的算法感兴趣 例如正弦 平方根等 目前 我正在尝试编写巴比伦方法 http en wikipedia org wiki Babylonian method Baby
  • 如何从python中的pandas数据框中的列中提取关键字(字符串)

    我有一个数据框df它看起来像这样 id Type agent id created at 0 44525 Stunning 6 bedroom villa in New Delhi 184 2018 03 09 1 44859 Villa
  • 前向声明不适用于转换运算符

    考虑下一个代码 include
  • Android:以编程方式在 EditText 内居中文本

    有没有办法让输入的文本居中EditText场地 更具体地说 光标不应从框的左侧开始 而应从中心开始 并在填充输入时向外向左移动 你应该使用 textView setGravity Gravity CENTER HORIZONTAL
  • 通过 PEAR 安装 phpunit 后如何获得 phpunit.bat?

    我需要 phpunit bat 来配置我的 NetBeans IDE 我在用着wamp http www wampserver com 我只需使用以下说明通过 pear 安装 phpunit 在开始使用 PEAR 之前 请从以下位置下载最后
  • 如何找到我的 MySQL URL、主机、端口和用户名?

    我需要找到我的 MySQL 用户名 当我打开 MySQL 命令行客户端时 它只询问我的密码 我不记得我的用户名了 为了与 JDBC 连接 我需要 URL 主机和端口号 我在哪里可以找到所有这些 如果您已经登录命令行客户端 请尝试以下操作 m
  • 在 Geodjango + Postgres 中存储圆

    希望在 geodjango 字段中存储一个圆 以便我可以使用 geodjango 查询 contains 来查找圆中是否有一个点 类似于使用 PolygonField 可以完成的操作 目前将其存储为十进制半径和 GeoDjango 点字段
  • 如何使用 Google Calendar API v3/Google API 客户端库显示*所有*可用日历的列表?

    我一直在尝试使用 PHP 访问 Google Calendar API v3 最初 我想简单地列出我可以通过 API 调用访问的用户日历 为此 我下载了 Google API PHP 客户端库 并尝试使用以下代码 经过我的改编 来自http
  • IIS 7.5 上的 MVC5 路由错误 (404.0) 错误

    一个古老的故事是 在开发机器上一切正常 但在主机服务器上却不行 HTTP 错误 404 0 未找到 模块IIS 网络核心 通知地图请求处理器 处理程序静态文件 错误代码0x80070002 尝试通过添加在开发机器上产生相同的错误
  • 使用参数时“Between”运算符生成错误的查询计划

    我有一个简单的日期表 Date DateID 其中包含 1900 年 1 月 1 日到 2100 年 12 月 31 日之间的日期列表 当使用从表中选择时between运算符和硬编码参数值 我得到了一个正确的查询计划 其中有 3 个估计行与
  • 使用多个参数注册 DbContext

    我正在尝试将 TenantProvider 注入 DbContext public class AppDbContext IdentityDbContext
  • Django 装置使用默认值保存

    我正在使用 Django 1 7 但我的装置有问题 我希望 Django 使用默认值或使用save 方法来创建未指定的值 这是我当前的对象 File uuidable py import uuid from django db import