如何通过ForeignKey连接数据?

时间:2018-10-05 04:46:38

标签: django listview django-queryset

我是Django的新手。我正在尝试检索与问题相关的所有标签。

我在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()

如何正确定义queryset以解决此问题?

2 个答案:

答案 0 :(得分:1)

如果要检索与特定问题相关的所有标签:

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

答案 1 :(得分:1)

您可以尝试这样做。

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