Django 独特的 Slug(按 id)

2024-07-04

class Product(models.Model):
    title = models.CharField(max_length=75)

class Deal(models.Model):
    product = models.ForeignKey(Product)
    slug = models.SlugField(max_length=255, unique=True)

具有与上面类似的基本设置,我想使用其交易的产品标题和交易本身的 id 为每个交易实例生成唯一的 slugs。 IE:"apple-iphone-4s-161" where 161是交易的 ID,前面的文本是产品的标题。

为此,我如何覆盖 Deal 模型的 save() 方法来应用它?


当然,您可以简单地覆盖模型上的 save() 方法(或为 post_save 信号制作接收器)。 它会是这样的:

from django.template.defaultfilters import slugify

class Deal(models.Model):
product = models.ForeignKey(Product)
slug = models.SlugField(max_length=255, unique=True)

    def save(self, *args, **kwargs):
        super(Deal, self).save(*args, **kwargs)
        if not self.slug:
            self.slug = slugify(self.product.title) + "-" + str(self.id)
            self.save()

但这个解决方案的丑陋之处在于它会访问数据库两次(保存两次)。这是因为当创建新的 Deal 对象时,它不会有 id,直到您第一次保存它(并且您对此无能为力)。

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

Django 独特的 Slug(按 id) 的相关文章

  • 如何使用 django_filters.DateFilter?

    我尝试使用 django filter 的 DateFilter 按确切日期进行过滤 但无法让它返回任何结果 myapp models py from django db import models class Event models M
  • 使用 Django + nginx 通过字节范围请求流式传输音乐

    我正在使用 Django nginx 构建一个音乐播放器应用程序 为此我需要一个支持字节范围请求的后端 Django 正在正确验证媒体文件 但 django 开发服务器不支持范围请求 206 部分响应 Nginx 使用后直接服务字节范围请求
  • 翻译基础设施无法在应用程序之前初始化

    我正在关注姜戈文档 https docs djangoproject com en 1 9 ref settings std setting LANGUAGES 但是当我按照它的说明操作时 我收到以下错误消息 The translation
  • 保存模型之前验证内联

    假设我有这两个模型 class Distribution models Model name models CharField max length 32 class Component models Model distribution
  • Django 操作错误:缺少表;迁移无法识别丢失的表

    我在 Django 1 7 中遇到问题 我试图将用户保存到表中 但收到错误消息 表明该表不存在 这是我正在执行的代码 from django conf import settings from django contrib auth imp
  • 在 django 测试运行期间避免 404 警告? [复制]

    这个问题在这里已经有答案了 刚刚升级到 Django 1 3 现在 每次我检查给定 URL 是否为 404 时 我的测试套件都会显示一堆无用的警告 在 Django 1 2 下 它并没有这样做 例如 假设我们已连接视图和 URL 以便该测试
  • 模拟 default=timezone.now 进行单元测试

    我正在尝试为执行大量日期时间操作的 django 应用程序编写单元测试 我已经安装了mock http www voidspace org uk python mock 给 django 打猴子补丁timezone now为了我的测试 虽然
  • Django REST Facebook 身份验证

    我有一个允许使用 django social auth 进行 Facebook 身份验证的网站 现在我还需要使用非基于 cookie 的 API 进行身份验证 我的想法是包含一个 sessionid 作为 POST 字段 它将使用 HTTP
  • Django:未在 iframe 中设置 CSRF Coo​​kie - 没有 csrf 豁免的解决方法

    我的项目正在几个第三方站点上部署 iframe 这些站点都是已知的并在 django 应用程序中注册 在这些 iframe 中 用户可以触发一些 ajax 形式的事件 直接打开网站 一切正常 如果我打开包含 iframe 的第 3 方站点
  • Django REST Framework 序列化器字段 required=false

    从文档中 只读 将其设置为 True 以确保在序列化表示时使用该字段 但在反序列化期间更新实例时不使用该字段 默认为 False 必需的 通常 如果反序列化期间未提供字段 则会引发错误 如果反序列化期间不需要该字段 则设置为 false 默
  • Django Shell 没有名为设置的模块

    我已经通过以下方式将 Django 部署到 Apachemod wsgi 当由 Apache 托管时 Django 运行良好 但是 我正在尝试通过进行一些维护manage py 但是当我尝试运行它时 出现错误 错误 无法导入设置 mypro
  • Django鼻子只运行项目测试

    I added nose django nose nose exclude coverage到我的 buildout cfg 并运行 buildout 此外我还添加了TEST RUNNER和NOSE ARGS到我的settings py 在
  • Django Rest 查询集按 url 参数过滤

    我需要根据 url 参数过滤 ListAPIView 中的查询集 基本上 应用程序通过调用 API 列出活动的所有参与者 用户 例如 events id attendees 您可以在下面找到序列化程序 模型 URL 和视图 我还想知道在 D
  • Django admin 中的多张图片上传

    我在尝试编写正确的模型以将多个图像上传到我的 Django 应用程序时遇到了很多麻烦 我希望能够通过 django 管理上传这些图像 我尝试过使用 ImageField 但它一次只允许一张图片 而且我还希望能够调整图像大小 这是我的 mod
  • Django 独特的 Slug(按 id)

    class Product models Model title models CharField max length 75 class Deal models Model product models ForeignKey Produc
  • DateTimeField 的格式[重复]

    这个问题在这里已经有答案了 可能的重复 将字符串转换为日期时间 https stackoverflow com questions 466345 converting string into datetime 在 Django 中 我收到此
  • 无法在 python 中获取当前 url

    我创建了一个类和方法 如下所示 我需要获取当前页面的网址 但在调用 get full path 时出现错误 class A object def get user request current url request get full p
  • 如何计算 django 连接表中对象的数量?

    我的问题很简单 我有Users谁拥有Assets or Assets属于用户的如果您愿意 但我无法检索其数量 计数 Assets each User有 我知道这对你们大多数人来说可能听起来很愚蠢 但我是 python django 来自 P
  • Django - 旋转图像并保存

    我想在 django 中为图像添加 向左旋转 和 向右旋转 按钮 这似乎很容易 但我浪费了一些时间 尝试了在 stackoverflow 上找到的一些解决方案 但还没有结果 我的模型有一个 FileField class MyModel m
  • 如何将自定义表单添加到 django 管理页面内联

    我可以将在 forms py 中定义的表单放入 Django 管理员页面吗 我也可以将此表单放入 Django 管理员页面的模型内联中吗 需要明确的是 这就是我所说的内联 class AnswerInline admin StackedIn

随机推荐