1

Django 1.0 Website Development という本を読みながら、小さなソーシャル ブックマーク アプリケーションを作成します。ブックマークを追加するフォームを作成する第 5 章にいますが、指示に従い、このエラーに何日も苦労しています。エラーが発生します:

AttributeError at /save/
'set' object has no attribute 'get'

テンプレート {{ form.as_p }} の 6 行目でエラーが発生しています。

views.py コードは次のとおりです。

def bookmark_save_page(request):
    if request.method == 'POST':
        form = BookmarkSaveForm(request)
        if form.is_valid():
            # create or get link.
            link, dummy = Link.objects.get_or_create(
                url=form.cleaned_data['url']
            )
            # create or get bookmark.
            bookmark, created = Bookmark.objects.get_or_create(
                user=request.user,
                link=link
            )
            # if bookmark is being updated, clear the old tag list
            if not created:
                bookmark.tag_set.clear()
            # create new tag list
            tag_names = form.cleaned_data['tags'].split()
            for tag_name in tag_names:
                tag, dummy = Tag.objects.get_or_create(name=tag_name)
                bookmark.tag_set.add()
            # save bookmark to database
            bookmark.save()
            return HttpResponseRedirect(
                '/user/%s/' % request.user.username
            )
        else:
            form = BookmarkSaveForm()
            variables = RequestContext(request, {
                'form' : form
            })
            return render_to_response('bookmark_save.html', variables)

テンプレートコードは次のとおりです。

{% extends "base.html" %}
{% block title %}Save Bookmark{% endblock %}
{% block head %}Save Bookmark{% endblock %}
{% block content %}
<form method="post" action=".">{% csrf_token %}
    **{{ form.as_p }}**
    <input type="submit" value="save" />
</form>
{% endblock %}

本のこの時点で立ち往生していて、答えが見つからないように見えるので、どんな助けも大歓迎です。ありがとう!

4

1 に答える 1

0

これはあなたにとってエラーですか?

for tag_name in tag_names:
    tag, dummy = Tag.objects.get_or_create(name=tag_name)
    bookmark.tag_set.add()  # not adding the tag?

次のようにすべきではありません: bookmark.tag_set.add(tag)? 実際には.add() エラーは発生しませんが、タグを追加していないことはわかっています。

トレースバックを見なくても、私は推測しています。

私の他の推測では、 RequestContext を間違って使用している可能性がありますか?

return render_to_response('bookmark_save.html',
                              {'form': form},
                              context_instance=RequestContext(request))

あなたが今それを使用している方法は、HttpResponse() を使用するショートカット以外のアプローチを意図していると思います

于 2012-05-02T05:01:41.050 に答える