#django #filter #primary-key #detailview
#django #Фильтр #первичный ключ #detailview
Вопрос:
Привет, я уверен, что у этого было простое решение, но я не могу его найти! Это должно требоваться ПОСТОЯННО!
Чтобы изучить django, я пишу простое приложение для регистрации своих результатов обучения. Итак, у меня есть две модели:
class Topic(models.Model):
title = models.CharField(max_length=40)
def __unicode__(self):
return self.title
class Meta():
ordering = ['title']
class Fact(models.Model):
note = models.CharField(max_length=255)
topic = models.ForeignKey('Topic')
def __unicode__(self):
return self.note
class Meta():
ordering = ['note']
У меня есть шаблон и URL, в которых будут перечислены ВСЕ темы.
Когда я вижу этот список, я хочу иметь возможность щелкнуть по нему [что я могу сделать] и связать с ним эту тему и все факты (чтобы появился внешний ключ) [технически это можно описать как набор дочерних объектов с фильтрованным запросом?] Я использую detailview.
url
url(r'^(?P<pk>d )/$', TopicDetailView.as_view(), name='facts'),
Вот код подробного представления. Знайте, я знаю, что он знает pk, поскольку он показывает нужную страницу, когда я удаляю фильтр extracontext (и просто беру .all()). Но я не могу ссылаться на это, сколько бы способов я ни пробовал. Я бы хотел что-то вроде этого…
class TopicDetailView(DetailView):
model = Topic
template_name = 'study/topic_facts.html'
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super(TopicDetailView, self).get_context_data(**kwargs)
# Add in a QuerySet of all the books
context['fact_list'] = Fact.objects.filter(topic='pk')
return context
Я могу сделать это, если добавлю некоторую логику и фильтр в шаблон, но мне это кажется не очень правильным, и я чувствую, что должен быть в состоянии сделать это легко, добавив правильный дополнительный контекст.
Помогите какому-нибудь бедному новичку! Большое спасибо.
Ответ №1:
'pk'
это просто строка. Вы имеете в виду self.kwargs['pk']
.
Но на самом деле вы вообще не хотите этого делать. Суперкласс уже добавляет объект Topic в контекст: и у вас есть связь между темой и фактом. Вы можете просмотреть эту взаимосвязь в шаблоне:
{% for fact in topic.fact_set.all %}
...
{% endfor %}
таким образом, вам не нужно переопределять get_context_data
.