我正在使用get_object_or_404
尝试从我的数据库中获取值列表。我正在尝试过滤状态变量的get_object_or_404
函数,以仅获取与disease_id
关联的值。下面的代码不起作用(它抓取状态表中的所有值。任何想法?
views.py
def option(request, disease_id, state_id):
state = get_object_or_404(State, relevantdisease=disease_id)
disease = get_object_or_404(Disease, pk=disease_id)
context = {'state': state, 'disease':disease }
return render(request, "option.html", context)
models.py
class State(models.Model):
state = models.CharField(max_length=300, verbose_name='state')
relevantdisease = models.ForeignKey(Disease, verbose_name="disease")
答案 0 :(得分:33)
get_object_or_404
只返回一个对象。您需要get_list_or_404
,因为一种疾病可能有多种状态:
from django.shortcuts import get_list_or_404, get_object_or_404
def option(request, disease_id, state_id):
state = get_list_or_404(State, relevantdisease__pk=disease_id)
disease = get_object_or_404(Disease, pk=disease_id)
context = {'state': state, 'disease':disease }
return render(request, "option.html", context)
答案 1 :(得分:3)
state = get_object_or_404(State, relevantdisease_id=disease_id)
或者,如果您愿意,请:
disease = get_object_or_404(Disease, pk=disease_id)
state = get_object_or_404(State, relevantdisease=disease)
关键是relevantdisease
字段要求过滤器使用实际的Disease
模型,而不是PK。如果您在隐式ID字段上进行过滤,则可以使用PK,如在我的第一个示例中,或者使用它来获取Disease对象和过滤器。如果你不需要疾病实例,那么后者效率很低,但是你的例子显示你检索它,无论如何首先获取它不会花费你任何性能。
答案 2 :(得分:2)
我认为你的模特遗漏了一些东西。
ForeighKey()
模型中Disease
State
State
。这意味着一个 Disease
有许多 get_object_or_404(State, relevantdisease_id=disease_id)
。
因此,当您执行State
时,您将获得disease_id
的所有get_list_or_404()
个对象。
您可能希望使用State
并使用{{1}}个对象列表,或者选择一个符合您需要的对象。