【问题标题】:Django - AttributeError => 'set' object has no attribute 'get'Django - AttributeError => 'set' 对象没有属性'get'
【发布时间】:2012-05-11 12:08:18
【问题描述】:

我正在阅读《Django 1.0 网站开发》一书,您可以在其中构建一个小型社交书签应用程序。我在第 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 %}

任何帮助都将不胜感激,因为我被困在书中的这一点上,似乎找不到答案。谢谢!

【问题讨论】:

  • @IgnacioVazquez-Abrams:“追溯或者它没有发生”,哈哈

标签: django attributes django-forms django-templates


【解决方案1】:

这对你来说是个错误吗?

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() 的非快捷方式

【讨论】:

  • 感谢您的帮助。原来这是一个 Django 版本问题。我正在使用的书是 Django 1.0,但我安装了 1.4。错误实际上是在表单代码和设置文本字段的属性中。我删除了它们,现在代码可以正常工作了。
猜你喜欢
  • 2020-04-01
  • 2020-11-07
  • 2021-07-04
  • 1970-01-01
  • 2018-03-11
  • 2015-11-14
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
相关资源
最近更新 更多