私はフラッシュカードを含む学習アプリを作っています。ユーザーは主題を作ってカードを含むデッキを置くことができます。例えば、生物学の科目では、「ユニット1」と呼ばれるデッキがあり、デッキにはカードがいっぱいです。デッキのためのURLは、理想的にはここでDjango:idsの代わりに名前付きURLでのトラブル
localhost:8000/subjects/Biology/unit-one/
のようになります。私のコード
views.py
class IndexView(generic.ListView):
template_name = 'card/index.html'
context_object_name = 'subjects'
def get_queryset(self):
return Subject.objects.all()
class SubjectView(DetailView):
model = Subject
slug_field = "subject"
template_name = 'card/subject.html'
class DeckView(DetailView):
model = Deck
template_name = 'card/deck.html'
def get_object(self, subjects, deck):
subject_obj = Subject.objects.filter(subject_name=subjects).first()
obj = Deck.objects.filter(subject=subject_obj, deck_name=deck).first()
return obj
def get(self, request, subjects, deck):
self.object = self.get_object(subjects, deck)
context = self.get_context_data(object=self.object)
return self.render_to_response(context)
models.py
class Subject(models.Model):
subject_name = models.CharField(max_length=100)
description = models.TextField()
def __str__(self):
return self.subject_name
def get_absolute_url(self):
return reverse('card:index')
class Deck(models.Model):
deck_name = models.CharField(max_length=100)
subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
def __str__(self):
return self.deck_name
class Card(models.Model):
term = models.CharField(max_length=100)
definition = models.TextField()
deck = models.ForeignKey(Deck, on_delete=models.CASCADE)
def __str__(self):
return self.term
urls.py
ですurl(r'^subjects/(?P<subject>[\w ]+)/$', views.SubjectView.as_view(), name='subject'),
url(r'^subjects/(?P<subject>[\w ]+)/(?P<deck>[\w ]+)/$', views.DeckView.as_view(), name='deck'),
index.htmlを
<li><a href="{% url 'card:subject' subject.subject_name %}">
subject.html
<ul>
{% for deck in subject.deck_set.all %}
<li><a href="{% url 'card:deck' deck.deck_name %}">{{deck.deck_name}}</a></li>
{% endfor %}
</ul>
しかし、私はこのエラーを取得しています。
Generic detail view SubjectView must be called with either an object pk or a slug.
インデックスページが正しく表示されていますが、件名をクリックするとそのエラーが発生します。これをどうやって解決するのですか?
番に変更
Char
で試してみてください? – user298519'slug_field'は識別子としてフィールドを配線し、' slug_url_kwarg'はurlパラメータをそのフィールドに結び付けます。だから私はそれもあなたのURLパラメータだから、 "件名"に設定すると思います。 – pnovotnak