【发布时间】:2020-11-12 16:23:02
【问题描述】:
基于以下模型,我正在尝试通过执行以下过滤器查询 BankingDetail 并检索帐户和机会的信息:
查询:
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"
}
}
]
我不明白为什么我指定的字段没有被恢复:
- 机会__external_opportunity_id
- account__external_account_id
- 机会__opportunity_name
- account__account_name
- account__行业
还有为什么它在未指定时带回了以下内容:
- 帐户
- 机会
- sfAttachmentID
- 已创建
【问题讨论】:
-
这些数据是如何生成的?它目前正在返回模型上的所有字段
-
@IainShelvington,问题中的当前响应是执行以下操作的结果: tmpJson = serializers.serialize("json",bankingLST) tmpObj = json.loads(tmpJson)
-
将您的序列化程序和您用来调用它的代码添加到问题中
-
@IainShelvington 对不起,我不明白你的要求,你知道我用什么代码来生成那个 JSON 吗?如果这是正确的,我在之前的评论中添加了,但以防万一我也在当前回复下方的问题中添加:
-
您使用的是
django.core.serializers?如果你想要一些复杂的序列化,我建议使用类似djangorestframework的东西,也许只是内置的json包可以为你做
标签: python django django-models django-orm django-filter