如何在 Django 中创建 unique_for_field slug?

2024-04-25

姜戈有一个日期唯一 http://docs.djangoproject.com/en/dev/ref/models/fields/#unique-for-date您可以在将 SlugField 添加到模型时设置的属性。这会导致 slug 仅对于您指定的字段的日期是唯一的:

class Example(models.Model):
    title = models.CharField()
    slug = models.SlugField(unique_for_date='publish')
    publish = models.DateTimeField()

对于像外键这样的非日期时间字段,实现相同功能的最佳方法是什么?理想情况下,我想做这样的事情:

class Example(models.Model):
    title = models.CharField()
    slug = models.SlugField(unique_for='category')
    category = models.ForeignKey(Category)

这样我就可以创建以下网址:

/example/category-one/slug
/example/category-two/slug
/example/category-two/slug <--Rejected as duplicate

到目前为止我的想法:

  • 将 slug 和 Categoryid 的唯一索引添加到表中。这需要 Django 之外的代码。当插入/更新失败时,内置管理员会正确处理这个问题吗?

  • 覆盖模型的保存并添加我自己的验证,如果存在重复则抛出错误。我知道这会起作用,但看起来不太干。

  • 创建一个从基础继承的新 slug 字段,并在其中添加 unique_for 功能。这似乎是最好的方法,但我查看了核心的 unique_for_date 代码,扩展它似乎不是很直观。

关于最好的方法有什么想法、建议或意见吗?


关于什么唯一的_在一起 http://docs.djangoproject.com/en/dev/ref/models/options/#unique-together?

class Example(models.Model):
    title = models.CharField()
    slug = models.SlugField(db_index=False)
    category = models.ForeignKey(Category)

    class Meta:
        unique_together = (('slug','category'),)
        # or also working since Django 1.0:
        # unique_together = ('slug','category',)

这会创建一个索引,但它不在 Django 之外;) 或者我错过了重点吗?

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

如何在 Django 中创建 unique_for_field slug? 的相关文章

随机推荐