使用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
找到答案 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