模型对象没有属性' get'

时间:2017-11-13 08:07:40

标签: django django-models

使用Django 1.11我在我的视图中坚持使用uuid引用。 我在这里阅读了所有类似的问题,但他们要么专注于表格或其他任何事情。

最小例子

这是一款名为 MegaTest 的应用。它已绑定到/testuuid/

我有一个工作索引视图,可以生成/testuuid/<uuid>

的链接

如果我点击索引页面上的链接,我会得到:

AttributeError at /testuuid/5a147a14-a9a9-4045-8e79-0ce2e8258a68/
'MegaTest' object has no attribute 'get'

models.py

class MegaTest(models.Model):
    uuid = models.UUIDField(db_index=True, default=uuid.uuid4,
               editable=False, unique=True)
    name = models.CharField(max_length=128, blank=True, null=True)

views.py

class IndexView(generic.ListView):
    template_name = 'testuuid/index.html'
    context_object_name = 'test_list'

    def get_queryset(self):
        """Return the last five published questions."""
        return MegaTest.objects.all()


class MegaTestDetailView(generic.DetailView):
    model = MegaTest

    def get(self, request, uuid):
        try:
            megatest = MegaTest.objects.get(uuid=uuid)
            return megatest

        except MegaTest.DoesNotExist:
            raise Http404

urls.py

app_name = 'testuuid'
urlpatterns = [
    # ex: /polls/
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^(?P<uuid>[\w-]+)/$', views.MegaTestDetailView.as_view(), name='detail'),
]

testuuid / index.html中

{% if test_list %}
    <ul>
    {% for test in test_list %}
        <li>
            <a href="{% url 'testuuid:detail' test.uuid %}">{{ test.name }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No tests available.</p>
{% endif %}

我假设一个该死的简单错误,但此时我真的不知道。

完整的追溯可以在http://dpaste.com/3JTB5NZ

找到

1 个答案:

答案 0 :(得分:1)

您应该覆盖get_object()方法,而不是get()

class MegaTestDetailView(generic.DetailView):
    model = MegaTest

    def get_object(self):
        try:
            megatest = MegaTest.objects.get(uuid=self.kwargs['uuid'])
            return megatest

        except MegaTest.DoesNotExist:
            raise Http404

您也可以使用get_queryset()或甚至只在url中指定pk字段,也不要在视图类中编写任何方法。 Django将自动在pk_url_kwarg

中查询您指定的字段