[英]multiple conditions in inner query in django orm
我想在Django orm中執行內部聯接查詢。
class A(models.Model):
status = models.PositiveSmallIntegerField()
b = models.ForeignKey(B)
text=models.CharField(max_length=100)
c_id=models.PositiveSmallIntegerField()
class B(models.Model):
name=models.CharField(max_length=100)
我具有類B的名稱的列表。我想查詢,以便我可以為c_id=1
和status=1
的模型B的每個名稱獲取模型A的b_id
和text
誰能幫忙怎么做?
編輯:我遍歷列表為
for n in name_list:
x=A.objects.filter(b__name=n, c_id=1, status=1).values('b__id', 'text')
s=A(status=2,b_id=x.b_id,text=x.text,c_id=1)
s.save()
這就是我要使用x.b_id和x.text的方式
好吧,既然您有一個帶有名稱的列表,那么我認為這可以幫助您:
names_list = [ ... ]
A.objects.filter(b__name__in=names_list, c_id=1, status=1).values('b__id', 'text')
其中names_list
是B名稱的初始列表。
編輯:
從您的編輯中,我可以看到您面臨的問題。 我認為您會在此行中得到一個錯誤:
s = A(status=2, b_id=x.b_id, text=x.text, c_id=1)
因為在x = A.objects.filter(b__name=n, c_id=1, status=1).values('b__id', 'text')
您將獲得一個QuerySet
不是A
對象,因為您正在使用.filter()
而不是.get()
方法。
如果您需要保存具有更新狀態的新條目,對於與第一個查詢匹配的每個A
對象,都可以嘗試以下操作:
for n in name_list:
x_objs = A.objects.filter(b__name=n, c_id=1, status=1)
for x in x_objs:
s = A(status=2, b=x.b, text=x.text, c_id=1)
s.save()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.