【问题标题】:Nested Query / not directly related field in DjangoDjango中的嵌套查询/不直接相关的字段
【发布时间】:2020-08-20 03:27:59
【问题描述】:

如果模型如下,

class Subject(BaseModel):
    name = models.CharField(db_column='name', max_length=200, blank=False, null=False, unique=True)

    class Meta:
        managed = True
        db_table = 'Subject'


class Topic(BaseModel):
    name = models.CharField(db_column='name', max_length=200, blank=False, null=False, unique=True)
    subject = models.ForeignKey(Subject, on_delete=models.CASCADE, null=False, related_name='subject_topic')

    class Meta:
        managed = True
        db_table = 'Topic'


class Question(BaseModel):
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE, null=False, related_name='question_topic')
    class Meta:
        managed = True
        db_table = 'Question'

如何为某个主题提出查询问题。

questions = Question.objects.filter(topic_in=Topic.objects.get(subject=subject).only('id').all())

但它不起作用。任何帮助都会非常有帮助。

【问题讨论】:

    标签: django django-models django-rest-framework django-filter


    【解决方案1】:

    您当前的“内部查询集”不会给您多个值,它只返回 1。

    Topic.objects.get(subject=subject).only('id').all()
    

    您正在使用返回模型实例的.objects.get(),因此除非您的模型具有这样的定义函数,否则例如.only().all() 将不起作用。

    此外,您实际上并不需要 2 个查询集,只需一个即可获得结果:

    my_subject_ids = [...]  # these are the ids of Subject models you want
    Question.objects.filter(topic__subject_id__in=my_subject_ids)
    

    您也可以查询Subject.name,只需使用以下内容:topic__subject__name__in=my_list

    如果您想查询特定的Subject-instance,您可以使用topic__subject=my_obj

    您可能还想查看docs 以了解更多信息。

    【讨论】:

      猜你喜欢
      • 2020-10-26
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 2020-07-15
      • 2011-09-25
      相关资源
      最近更新 更多