簡體   English   中英

Django orm內部查詢中的多個條件

[英]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=1status=1的模型B的每個名稱獲取模型A的b_idtext

誰能幫忙怎么做?

編輯:我遍歷列表為

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM