【问题标题】:query to fetch x questions which have some tag y查询以获取具有某些标签 y 的 x 个问题
【发布时间】:2020-01-27 11:17:25
【问题描述】:

我有 2 个模型:

class Question(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255)

def __str__(self):
    return self.name


class Tag(models.Model):
    Tag_id = models.IntegerField()
    ques_id = models.ForeignKey(Question, on_delete=models.CASCADE)
    name = models.CharField(max_length=255)

def __str__(self):
    return self.name

为了获得输入标签 ID 的 10 个问题 ID,将查询什么?输出格式应为:

{
"id": 1,
"name": "QUES 1",
"tags": [{
    "id": 1,
    "name": "Abcd"
 }]
}

【问题讨论】:

  • 对于给定的tag ids,还是只有一个标签(可能是多个)?
  • 对于给定的标签“ids”
  • 但是对于给定的标签,这里可能最多一个问题,因为从TagQuestion有一个ForeignKey
  • 一个问题可以分配多个标签ID
  • 是的,但不是针对给定Tag 的多个问题。这是一个Question 1-n Tag 关系。

标签: python django django-models django-rest-framework django-views


【解决方案1】:

如果您有给定的标签 ID 列表tag_ids,您可以通过以下方式获得Questions:

Question.objects.filter(<b>tag__tag_id__in=tag_ids</b>)

或者您可以限制问题的数量,并通过以下方式区分:

Question.objects.filter(tag__tag_id__in=tag_ids)<b>.distinct()[:10]</b>

一些补充说明:

注意:请使用AutoField [Django-doc]作为主键,这样可以确保主键得到相应的分配,并且在您保存对象时更新。 p>

 

注意:通常不会在 ForeignKey 字段中添加后缀 _id,因为 Django 将自动添加一个带有_id 后缀的“孪生”字段。因此应该 是question,而不是ques_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-05
    • 2020-07-02
    • 2010-10-14
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多