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

감사합니다. Mr. Efkin하지만이 쿼리는 크레딧 테이블에 크레딧이있는 클라이언트를 반환합니다. 여기 클라이언트가 크레디트를 가지고 있는지 여부를 모든 클라이언트에게 가져 오려고합니다. 예를 들어, 크레딧 테이블 크레딧 테이블이 비어 있으면 0을 반환해야합니다. – xyzwithashok

+0

죄송합니다. 질문에 대한 오해, 대답을 업데이트합니다. – efkin

+0

많은 감사합니다. Mr. Efkin, 내 트리에서 모든 클린트를 가져 오는 쿼리를 만들 수 있습니까? 여기서 우리는 오직 저만 창조 한 클라이언트를 가져옵니다. 예를 들어 여기서 나는 리셀러이고 나는 리셀러가 될 수있는 클라이언트를 만들고 또한 클라이언트를 끝낸다. 이제는 내 나무에있는 모든 고객을 가져오고 싶습니다. – xyzwithashok

관련 문제