2017-10-12 87 views
0

我有三個表User,Users_clients和Credits。 我想列出當前用戶的客戶的詳細信息和信用。 如果有任何客戶在信用表中列出,那麼信用應該返回0,否則應該返回信用值。django三個表內的反向查詢查詢

我model.py是

class User_clients(models.Model): 
user = models.ForeignKey(User, related_name='myuser') 
client = models.ForeignKey(User, related_name='myclient') 

class Credits(models.Model): 
user = models.OneToOneField(User, on_delete=models.CASCADE) 
credit = models.IntegerField(null=True, default=0) 

我views.py是

def clients(request): 
try: 
    data = User_clients.objects.order_by('-id').filter(user_id=request.user.id)[0:10] 
except User_clients.DoesNotExist: 
    data = None 
return render(request, "client_list.html",{'title':"Client List",'clients':data,'active':'myclients','open':'clients'}) 

非常感謝提前!您的評論後

+0

你不應該使用'User_clients',但你應該在用戶添加一個字段:'客戶= models.ManyToManyField( '用戶')',那麼,你可以做'data = User.objects.get(id = request.user.id).clients.all()' – Blusky

回答

0

更新:

from itertools import chain 
from django.db.models import F 


without_credit = User_clients.objects.filter(user=request.user, client__credits__is_null=True).annotate(credit=0) 
with_credit = User_clients.objects.filter(user=request.user, 
client__credits__is_null=False).annotate(credit=F("client__credits__credit")) 
data = chain(without_credit, with_credit) 
+0

非常感謝Efkin先生,但是這個查詢返回在信用表中有信用的客戶。 在這裏,我想獲取所有的客戶端是否客戶有信用或不。我們假設。如果信用表信用表是空的,那麼它應該返回0. – xyzwithashok

+0

對不起,我誤解了你的問題,我正在更新一個答案 – efkin

+0

許多很多謝謝先生Efkin,是否有可能做一個查詢,獲取我樹中的所有clint。在這裏我們只提取由我創建的客戶端。例如,在這裏,我是經銷商,我也可以成爲經銷商和最終客戶的客戶。所以現在我想獲取我樹中的所有客戶端。 – xyzwithashok