1

我想覆盖记录的 slug 字段。在我看来,加载 add_post 页面时,我会自动创建一条新记录。像:

def add_post(request):
    post=Post(owner=request.user)
    post.save()
    post_id = post.id
    if request.method == 'POST':
        form = add_form(request.POST)
        if form.is_valid():
            form_title = form.cleaned_data['title']
            #other fields

            updated_post = Post.objects.get(id=post_id)
            updated_post.title = form_title
            #save other fields...
            updated_post.save()

我的models.py中有slug_field:

class Post(models.Model):
    owner = models.ForeignKey(User)
    title = models.CharField(max_length=100, blank=True)
    #other fields...
    slug = AutoSlugField(populate_form='title', unique=True)

在我的views.py之后post = Post(owner=request.user);它创建一个具有默认 slug 字段名称的记录,因为还没有标题值。

但是,如您所见,我更新了该帖子(添加标题和其他字段)。但是 slug 字段不会自行更新。它仍然是默认的 slug 名称。

我怎样才能解决这个问题?如果不可能,我将从我的项目中删除 AutoSlugField 并仅使用 post id。

4

3 回答 3

5

来自 AutoSlugField 文档:

always_update – 布尔值:如果为 True,则每次保存模型实例时都会更新 slug。小心使用,因为酷 URI 不会改变(并且 slug 通常是对象 URI 的一部分)。请注意,即使该字段是可编辑的,当激活此选项时,任何手动更改都将丢失。

所以这应该工作:

slug = AutoSlugField(populate_form='title', always_update=True, unique=True)
于 2012-11-25T12:37:10.400 回答
1

更好的文档是自己的代码:

http://django-command-extensions.googlecode.com/svn/trunk/django_extensions/db/fields/init .py _

slug = AutoSlugField(populate_from='title', overwrite=True, unique=True)

于 2013-09-12T20:37:13.750 回答
0

使用此代码:

slug = AutoSlugField(max_length=500, populate_from='name', null=True, blank=True, always_update=True, unique=True)
于 2021-12-08T17:46:27.197 回答