Django选择具有特定外键的重复字段值的行

时间:2012-02-12 17:04:53

标签: django django-models

again我想在我的模型中搜索重复项,但现在情况略有不同。

以下是我的模特:

class Concept(models.Model):
    main_name = models.ForeignKey(Literal)
    ...
class Literal(models.Model):
    name = models.Charfield(...)
    concept = models.ForeignKey(Concept)
    ...

现在我正在努力实现的任务: 选择主要名称的所有文字,相同名称 相同的概念

例如,如果我有文字:

[{id:1, name:'test', concept:1}, {id:2, name:'test', concept:1}]

和概念:

[{id:1, main_name:1}]

然后在结果中我应该得到ID = 2的文字。

2 个答案:

答案 0 :(得分:1)

如果我理解你想要的问题:

  1. 所有未对ConceptK进行ForeignKey的文字对象。
  2. 从该集合中,选择名称和概念相同的那些。
  3. 如果是这样,我认为这应该有效:

    第一部分:

    q = Literal.objects.exclude(pk__in=Concept.objects.values_list('id', flat=True))
    

    编辑:

    根据Jan的优秀反馈,我认为#2你需要使用raw SQL

答案 1 :(得分:1)

听起来好像你想要执行这样的SQL查询:

SELECT l1.* FROM myapp_literal AS l1,
                 myapp_literal AS l2
WHERE l1.id <> l2.id
  AND l1.name = l2.name
  AND l1.concept = l2.concept
  AND l1.id NOT IN (SELECT main_name FROM myapp_concept)
GROUP BY l1.id

好吧,如果查询过于复杂而无法用Django的查询语言轻松表达,您可以always ask Django to do a raw SQL query - 这可能是其中一种情况。