2017-11-13 17 views
0

Django 1.11を使用しています。私は自分のビューで参照しているuuidに固執しています。 私はここでよく似た質問をすべて読んだが、フォームやその他のものに重点を置いている。モデルオブジェクトには 'get'という属性はありません

最小限の例

それはMegaTestと呼ばれるアプリです。

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

models.py

:私が私のインデックスページ上のリンクをクリックすると、私が手 /testuuid/<uuid>

へのリンクを生成するワーキングインデックスビューを持っている/testuuid/

にバインドされます

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 %} 

私は気単純なミスを想定したが、私は本当にこの時点では見当もつかない。

完全なトレースバック

は、あなたが代わりに get()get_object()メソッドをオーバーライドする必要があり、ここで http://dpaste.com/3JTB5NZ

答えて

1

見つけることができます。

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 

また、単にURLでpkフィールドを指定し、ビュークラスの任意の方法を書いていないget_queryset()たりして作業することができます。 Djangoは指定したフィールドを自動的にクエリしますpk_url_kwarg

関連する問題