【问题标题】:Display only one instance of same object in model (Distinct other instances of same object)仅显示模型中同一对象的一个​​实例(不同的同一对象的其他实例)
【发布时间】:2021-11-24 12:43:31
【问题描述】:

我正在构建一个简单的问答网站,我正在尝试实现一个功能,用户可以在其中upload 4 answers But I am trying to hide show only any one answer 这显示了与问题相关的所有答案。

例如:- question_a 有 4 个答案,然后我尝试显示其中任何一个。

models.py

class Question(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=30)
    marked = models.BooleanField(booleanField)

class Answer(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    question_of = models.ForeignKey(BlogPost, on_delete=models.CASCADE)
    body = models.CharField(max_length=30)

views.py

def page(request):
    query_2 = Answer.objects.filter(question_of__marked=True)[:1]

    context = {'query_2':query_2}
    return render(request, 'page.html', context)

在此查询中,我试图显示具有marked=True 的问题的答案,并且我还试图仅显示一个问题的答案,但它显示的是 4。

使用 [:1] 后,它只显示全部结果。

  • 我也试过.distinct(),但对结果没有影响。

我想做什么?

我正在尝试显示具有marked=True 的每个问题的第一个答案

非常感谢您的帮助。谢谢你

【问题讨论】:

  • Answer.objects.filter(question_of__marked=True) 这将返回问题标记为 True 的所有答案。如果您想要任何一个问题的答案,请使用问题实例或 question_id 过滤问题字段。你也可以显示page.html
  • 如果您想显示与问题相关的答案,那么您的视图(页面)无效,您应该更改它。
  • 我试图只回答每个问题的答案

标签: python django django-models django-views django-queryset


【解决方案1】:

答案模型与 blogPost 模型有一对多的关系,而不是问题模型的变化,它应该可以工作。 第二件事是传递你想要得到第一个答案的问题。最后更改您作为参数传递的 BooleanField 并根据需要使用默认值。

marked = models.BooleanField(default=False)

def page(request):
quest = Question.objects.get(pk=1) # the quest obj 
query_2 = [Answer.objects.filter(question_of__marked=True)[:1]]
context = {'query_2':query_2}
return render(request, 'page.html', context)

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
  • 正如我提到的,我也尝试过使用 [:1],它只显示了整个模型的一个结果。
  • 我不明白你到底想要什么。
【解决方案2】:

这将从查询中取出第一行

query_2 = Answer.objects.filter(question_of__marked=True).first()

这将只需要每个组的答案 id(因为下面的代码按 question_of 分组)

query_2 = Answer.objects.filter(
    question_of__marked=True
).values(
    'question_of'
).annotate(
    selected_id=Max(id) # Assuming id is the pk for Answer model
).distinct().values_list('selected_id')

# Query again using the filtered ids
out_query = Answer.objects.filter(question_of__marked=True, id__in=query_2)

【讨论】:

  • 它只显示一个结果,但我试图显示每个问题的第一个答案。
  • 对不起,误会了,我已经通过添加聚合编辑了答案,希望对您有所帮助
  • 没关系,但显示错误:- Cannot resolve expression type, unknown output_field
猜你喜欢
  • 2015-01-25
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 2012-11-23
相关资源
最近更新 更多