Python django:filter.values(…)未检索请求的字段

Python django:filter.values(…)未检索请求的字段,python,django,django-models,django-orm,django-filter,Python,Django,Django Models,Django Orm,Django Filter,基于以下模型,我尝试通过执行以下筛选来查询BankingDetail并检索帐户和opportunity的信息: 查询: bankingLST = BankingDetail.objects.filter(opportunity__opportunity_name__icontains = searchItem) | BankingDetail.objects.filter(account__account_name__icontains = searchItem) | BankingDetail

基于以下模型,我尝试通过执行以下筛选来查询BankingDetail并检索帐户和opportunity的信息:

查询:

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')
型号:

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 + ')'
目前的答复:

        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"
    }
}
]
我不明白为什么我指定的字段没有被带回:

  • opportunity\u外部\u opportunity\u id
  • 账户\外部\账户\ id
  • opportunity\u opportunity\u名称
  • 账户名称
  • 会计行业
但同时也解释了为什么在没有具体说明的情况下,它带回了以下内容:

  • 帐目
  • 机会
  • sfAttachmentID
  • 创造
    • 你可以试试这个

      
      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')
      
      
      从django.db.models导入Q
      bankingLST=BankingDetail.objects.filter(Q(opportunity\uuuuuOpportunity\uName\uuuuuiContains=searchItem)|
      Q(帐户名称=搜索项)|
      Q(sfAttachmentID\uuu icontains=searchItem)|
      Q(机会\外部\机会\ id \ icontains=searchItem)
      |Q(账户\外部\账户\ id \ icontains=searchItem)).值(
      'id'、'opportunity\u外部\u opportunity\u id',
      “账户外部账户id”,
      “opportunity\u opportunity\u name”,
      “账户名称”,
      "会计行业")
      
      该数据是如何生成的?它将返回模型上的所有字段moment@IainShelvington,问题中的当前响应是执行以下操作的结果:tmpJson=serializers.serialize(“json”,bankingLST)tmpObj=json.loads(tmpJson)将序列化程序和用于调用它的代码添加到question@IainShelvington对不起,我不明白你的请求,你知道我用什么代码生成JSON吗?如果这是正确的,我在前面的评论中添加了,但为了以防万一,我也在当前回答下面的问题中添加了:您正在使用
      django.core.serializers
      ?如果您想要一些复杂的序列化,我建议使用类似于
      djangorestframework
      的东西,也许内置的
      json
      包就可以了,尽管我遇到了错误:“dict”对象没有属性“\u meta”