1

レコードのスラッグ フィールドをオーバーライドしたい。私の見解では、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 フィールド自体は更新されません。それはまだデフォルトのスラッグ名です。

どうすればこれを修正できますか? それが不可能な場合は、プロジェクトから AutoSlugField を削除し、投稿 ID のみを使用します。

4

3 に答える 3

5

AutoSlugField のドキュメントから:

always_update – boolean: True の場合、モデル インスタンスが保存されるたびにスラッグが更新されます。クールな URI は変更されないため、注意して使用してください (通常、スラッグはオブジェクトの 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 に答える