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的文字。
答案 0 :(得分:1)
如果我理解你想要的问题:
如果是这样,我认为这应该有效:
第一部分:
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 - 这可能是其中一种情况。