gpt4 book ai didi

python - 如何使用 postgresql 从 Django 中的两个表中检索数据

转载 作者:可可西里 更新时间:2023-11-01 15:00:41 27 4
gpt4 key购买 nike

在我的 views.py 中,这是我的代码:

def search(request):
qset = Q()
query = request.GET.get('q', '')
queryC = request.GET.get('clients', '')
queryD = request.GET.get('documents', '')
queryT = request.GET.get('topics', '')
if query:
newquery = stopwords.strip_stopwords(query)
terms = newquery.split()
if queryT != 'empty':
for term in terms:
qset |= (
Q(Topic_id__Name__icontains=queryT) &
Q(Question_id__Statement__icontains=term)
)
results = Response.objects.filter(qset).distinct()
else:
for term in terms:
qset &= (
Q(Question_id__Statement__icontains=term)
)
results = Response.objects.filter(qset).distinct()
else:
results = []
return render_to_response("app/search.html", {
"results": results,
"query": query
})

模型.py:

class Question(models.Model):
Topic_id = models.ForeignKey(Topic, on_delete=models.CASCADE)
Statement = models.CharField(max_length=255, default='Question')
Keyword = models.CharField(max_length=255, default='Keyword')

def __str__(self):
return self.Statement


class Response(models.Model):
Question_id = models.ForeignKey(Question, on_delete=models.CASCADE)
Topic_id = models.ForeignKey(Topic, on_delete=models.CASCADE)
Response = models.TextField(default='Response')

def __str__(self):
return self.Response

它返回与用户输入的查询密切相关的响应。但我也希望它返回与响应相关联的问题。

我的回复表有一个外键指向由 Questions_id 链接的问题表。我读过我可能必须使用 select_related() 但不确定如何使用。

最佳答案

您有一个响应查询集。当您在模板中进行迭代时,您可以按照相关问题的外键:

{% for response in results %}
{{ response.Response }}
{{ response.Question_id.Statement }}
{% endfor %}

这里使用 select_related 是一种优化,因为它会将相关问题作为 JOIN 而不是进行单独的查询。它不是(并且从不)是必需的。但这里是个好主意。

results = Response.objects.filter(qset).select_related('Question_id').distinct()

几个风格要点。对属性名称使用小写是 Pythonic:statementkeyword 等。更重要的是,您不应该对 ForeignKey 字段使用 _id;尽管名称如此,但字段本身实际上并不是 ID,因为它们提供了对整个相关对象的访问权限(如我上面所示)。所以你应该称它们为questiontopic等。

关于python - 如何使用 postgresql 从 Django 中的两个表中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51534070/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com