我想覆盖记录的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)
在post = Post(owner=request.user)
行之后的views.py中;它创建一个带有默认slug字段名称的记录,因为还没有标题值。
但是,如你所见,我更新了帖子(添加标题和其他字段)。但是slug字段不会自行更新。它仍然是默认的slug名称。
我该如何解决这个问题?如果不可能,我将从我的项目中删除AutoSlugField并仅使用post id。
答案 0 :(得分:5)
来自AutoSlugField文档:
always_update - boolean:如果为True,则每次保存模型实例时都会更新slug。请小心使用,因为很酷的URI不会改变(并且slug通常是对象URI的一部分)。请注意,即使该字段是可编辑的,激活此选项时也会丢失任何手动更改。
所以这应该有效:
slug = AutoSlugField(populate_form='title', always_update=True, unique=True)
答案 1 :(得分:1)
Better文档是自己的代码:
http://django-command-extensions.googlecode.com/svn/trunk/django_extensions/db/fields/init.py
slug = AutoSlugField(populate_from ='title',overwrite = True, 独特= TRUE)