Reputation: 2141
Based on the following models, I am trying to query BankingDetail and retrieving information of the account and opportunity, by doing the following filter:
Query:
bankingLST = BankingDetail.objects.filter(opportunity__opportunity_name__icontains = searchItem) | BankingDetail.objects.filter(account__account_name__icontains = searchItem) | BankingDetail.objects.filter(sfAttachmentID__icontains = searchItem) | BankingDetail.objects.filter(opportunity__external_opportunity_id__icontains = searchItem) | BankingDetail.objects.filter(account__external_account_id__icontains = searchItem).values(
'id',
'opportunity__external_opportunity_id',
'account__external_account_id',
'opportunity__opportunity_name',
'account__account_name',
'account__industry')
Models:
class AccountDetail(models.Model):
external_account_id = models.CharField(max_length=18, unique = True)
account_name = models.TextField(unique = False, blank=True, null=True)
industry = models.CharField(max_length=18, unique = False, blank=True, null=True)
billing_state = models.CharField(max_length=18, unique = False, blank=True, null=True)
def __str__(self):
return self.account_name
class OpportunityDetail(models.Model):
account = models.ForeignKey(AccountDetail, on_delete=models.CASCADE, related_name='AccountDetails')
external_opportunity_id = models.CharField(max_length=18, unique = True)
opportunity_name = models.TextField(unique = False, blank=True, null=True)
stage_name = models.CharField(max_length=18, unique = False, blank=True, null=True)
def __str__(self):
return self.opportunity_name
class BankingDetail(models.Model):
account = models.ForeignKey(AccountDetail, on_delete=models.CASCADE, related_name='AccountBankingDetails')
opportunity = models.ForeignKey(OpportunityDetail, on_delete=models.CASCADE, related_name='OpportunityDetails')
sfAttachmentID = models.CharField(max_length=18, unique = True)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.account.account_name + ' - (' + self.opportunity.opportunity_name + ')'
Current response:
tmpJson = serializers.serialize("json",bankingLST)
tmpObj = json.loads(tmpJson)
print(tmpObj)
[
{
"model": "app_banking.bankingdetail",
"pk": 2,
"fields": {
"account": 3,
"opportunity": 2,
"sfAttachmentID": "175688177w3",
"created": "2020-07-20T01:55:20.351Z"
}
},
{
"model": "app_banking.bankingdetail",
"pk": 3,
"fields": {
"account": 4,
"opportunity": 3,
"sfAttachmentID": "1236547898745632x3",
"created": "2020-07-23T00:08:56.863Z"
}
}
]
I dont understand why the fields that I am specifying are not been brought back:
but also why it brought back the below ones when they were not specify:
Upvotes: 0
Views: 48
Reputation: 7330
You can try this.
from django.db.models import Q
bankingLST=BankingDetail.objects.filter(Q(opportunity__opportunity_name__icontains=searchItem)|
Q(account__account_name__icontains = searchItem)|
Q(sfAttachmentID__icontains = searchItem)|
Q(opportunity__external_opportunity_id__icontains = searchItem)
|Q(account__external_account_id__icontains = searchItem)).values(
'id', 'opportunity__external_opportunity_id',
'account__external_account_id',
'opportunity__opportunity_name',
'account__account_name',
'account__industry')
Upvotes: 1