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
。它完全按照我想要的方式工作。再次感谢。