Django 基于其他模型过滤对象

Django 基于其他模型过滤对象,django,django-models,filter,django-views,Django,Django Models,Filter,Django Views,我有一个网站,服务提供商将他们的服务上传到网站,除了他们的服务,他们还可以上传他们创建的每一个服务的常见问题解答 因此,我有两个模型,每个模型都是独立的,并用外键链接 下面是这两个模型的model.py文件 class Services(models.Model): name = models.CharField(max_length=50) slug = models.SlugField(editable=False, max_length=130) category

我有一个网站,服务提供商将他们的服务上传到网站,除了他们的服务,他们还可以上传他们创建的每一个服务的常见问题解答

因此,我有两个模型,每个模型都是独立的,并用外键链接

下面是这两个模型的
model.py
文件

class Services(models.Model):
    name = models.CharField(max_length=50)
    slug = models.SlugField(editable=False, max_length=130)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    intro = models.CharField(max_length=100, unique=True)
    pricing = models.IntegerField()
    detail = SummernoteTextField()
    image = models.ImageField(default='default.png', upload_to='services')
    author  = models.ForeignKey(User, on_delete=models.CASCADE, null=True)


class FAQ(models.Model):
    question = models.CharField(max_length=150, help_text="The possible question that a client could ask you")
    answer = models.TextField(help_text="The response to the question above")
    service = models.ForeignKey(Services, on_delete=models.CASCADE, related_name='faq_service', help_text="Which service is this FAQ linked to?")
    author = models.ForeignKey(User, on_delete=models.CASCADE)
在我的
views.py
中,我添加了一些功能,允许我在包含文章所有详细信息的同一个DetailView中显示常见问题的列表视图。 我的
视图.py
如下所示:

class ServiceDetailView(DetailView):
    model = Services

    def get_context_data(self, *args, **kwargs):
        context = super(ServiceDetailView, self).get_context_data(*args, **kwargs)
        context['faq'] = FAQ.objects.all() # to fix-->Need to only show FAQ of that service 
        return context 
现在,我需要能够根据仅列出的该服务的常见问题过滤常见问题部分。我不知道该怎么做。我尝试访问文档,但对于这种情况没有解决方案,我不想将FAQ添加到服务模型中,因为我需要服务提供商能够列出任意多的FAQ

如果有人想知道我的模板是什么样子的,这里就是

<h3 class="mt-4 mb-4">Service FAQ</h3>

<div class="accordion accordion-flush" id="accordionFlushExample">
  {% for faq in faq %}
  <div class="accordion-item">
    <h2 class="accordion-header" id="flush-headingOne">
      <button
        class="accordion-button collapsed"
        type="button"
        data-mdb-toggle="collapse"
        data-mdb-target="#flush-collapseOne{{ faq.id }}"
        aria-expanded="false"
        aria-controls="flush-collapseOne"
      >
        {{ faq.question }}
      </button>
    </h2>
    <div
      id="flush-collapseOne{{ faq.id }}"
      class="accordion-collapse collapse"
      aria-labelledby="flush-headingOne"
      data-mdb-parent="#accordionFlushExample"
    >
      <div class="accordion-body">
        {{ faq.answer }}
      </div>
    </div>
  </div> 
  {% endfor %}
</div>
服务常见问题解答
{常见问题解答%中的常见问题解答%
{{faq.question}
{{faq.answer}
{%endfor%}

过滤
服务
字段,使其等于
self.object
。在继承自的大多数视图中,第一步之一是将
对象
属性附加到视图对象:

class ServiceDetailView(DetailView):
    model = Services

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        context['faq'] = FAQ.objects.filter(
            service=self.object
        )
        return context
类服务详细视图(详细视图):
模型=服务
def获取上下文数据(self、*args、**kwargs):
context=super()。获取上下文数据(*args,**kwargs)
上下文['faq']=faq.objects.filter(
服务=自我对象
)
返回上下文

注意:通常Django模型的名称为单数,因此
服务
而不是
服务


非常感谢你。我想我真的需要重温一下文档,了解一下
self
。它完全按照我想要的方式工作。再次感谢。