Как получить данные, связанные с ForeignKey? - PullRequest
0 голосов
/ 05 октября 2018

Я новичок в Джанго.Я пытаюсь получить все теги, связанные с вопросом.

У меня есть два класса models.py.

class Questions(models.Model):
    title = models.CharField(max_length=500)
    description = models.TextField(blank=True)

class Tag(models.Model):
    name = models.CharField(max_length=50)
    tag_on = models.ForeignKey(Questions, on_delete=models.CASCADE)

Мой views.py.

class QuestionListView(ListView):
    model = Questions #assign model to display
    template_name = 'index.html'

class TagListView(ListView):
    model = Tag
    template_name = 'index.html'
    context_object_name = 'tag_list'
    queryset = ?

Я добавил это к своему index.html.

{% for val in object_list %}
  {{ val.id }} <br>
  {{ val.title }} <br>
{% endfor %}

{% for tag in tag_list %}
  {{ tag }}
{% endfor %}

Я пробовал несколько queryset, как это, но ни один из них не сработал.

queryset = Tag.objects.all().get(Tag.id=Questions.id)
queryset = Tag.objects.select_related('tag_on__id').get()

Как определить набор запросовправильно решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Вы можете просто попытаться сделать это.

queryset=Tag.objects.filter(tag_on__id=<your_id>)

Что касается того, как отобразить его в шаблоне.

Вы можете сделать что-то вроде этого.

def view(request):
  return render(request,'index.html',context={queryset:Tag.objects.filter(tag_on__id=<your_id>)})

и в вашем index.html

{% for i in queryset %}
  {{i.name}} // or any fields that you want
{% endfor %}

Для подхода на основе классов:

from django.views.generic import TemplateView
class yourview(TemplateView):
    template_name = "index.html"

    def get_context_data(self, kwargs):
      context = super(yourview, self).get_context_data(**kwargs)
      context['queryset'] = Tag.objects.filter(tag_on__id=<your_id>)
      return context
0 голосов
/ 05 октября 2018

Если вы хотите получить все теги, связанные с конкретным вопросом:

question = Questions.objects.get(<some_condition>)
queryset = Tag.objects.filter(tag_on=question)
...