假设我有2个这样的django模型:
class Spam(models.Model):
somefield = models.CharField()
class Eggs(models.Model):
parent_spam = models.ForeignKey(Spam)
child_spam = models.ForeignKey(Spam)
鉴于输入“垃圾邮件”对象,django查询将如何显示:
在SQL中:
SELECT * FROM Spam WHERE id IN (SELECT child_spam FROM Eggs WHERE parent_spam = 'input_id')
答案 0 :(得分:1)
我知道这只是一个例子,但是这个模型设置实际上并没有实际验证 - 你不能指定两个单独的ForeignKeys指向同一个模型而不指定related_name
。因此,假设相关名称分别为egg_parent
和egg_child
,并且您现有的垃圾邮件对象名为my_spam
,则可以执行此操作:
my_spam.egg_parent.child_spam.all()
或
Spam.objects.filter(egg_child__parent_spam=my_spam)
更好的是,在垃圾邮件模型上定义一个ManyToManyField('self')
,它会为你处理所有这些,然后你会这样做:
my_spam.other_spams.all()
答案 1 :(得分:0)
根据你的sql代码,你需要这样的东西
Spam.objects.filter(id__in= \
Eggs.objects.values_list('child_spam').filter(parent_spam='input_id'))