gpt4 book ai didi

django - 在 django tastypie 中将 use_in 字段选项与 ModelResource 一起使用

转载 作者:行者123 更新时间:2023-12-02 04:33:51 24 4
gpt4 key购买 nike

我对 Resource 之间的区别有点困惑和ModelResource在 django tastypie 中。

我有一个Resource

class ReportResource(ModelResource):
class Meta:
queryset = Report.objects.filter(deleted__isnull=True)
resource_name = 'report'
object_class = Report

检索列表时,字段 report_data不应该被获取....

是否可以使用 use_in ModelResource 中的选项?

另一种选择是使用 full_dehydrate :

def full_dehydrate(self, bundle, for_list=False):   

if for_list:
# List view
# Remove unnecessary fields from the bundle

# Detail view
return super(ReportResource,self).full_dehydrate(bundle,for_list)

但是删除脱水中的字段可能会导致性能不佳,因为所有字段都已从数据库中获取。

编辑

我将进一步解释我想要实现的目标

使用api/report/检索报告列表时我想获得一个仅包含 name 的 json 数组和description报告对象的。

使用 api/report/88387 检索单个报告时我想获取一个包含模型中所有字段的 json。

这在 full_dehydrate 中是可能的功能如上所述,但在我看来必须有一个内置的解决方案。 use_in 资源字段的属性似乎是一个很好的解决方案,但我不确定如何将它与 ModelResource 一起使用.

github 上有一个旧问题关于这个,我想知道是否有解决方案。

最佳答案

现在您的字段已填充,请在 ReportResource 中对 __init__ 函数进行子类化并在那里设置 use_in 标志:

def __init__(self, *args, **kwargs):
# Call the object's parent, which will set up and populate
# the Resource fields from the queryset provided
super(ReportResource, self).__init__(*args, **kwargs)
# Now loop through the fields of the resource, and when we
# find the one we only want to be shown in the detail view,
# set its use_in attr appropriately
for field_name, field_object in self.fields.items():
if field_name == 'report_data':
field_object.use_in = 'detail'

(一般来说,您可以将其放在混合的单独类中,也许它可以从 Meta 中的变量中读取您想要的列表,但这应该满足您的要求。)

通过 self.fields.items() 进行的相同类型的循环用于 Resource 的 full_deHydrate 方法中的 use_in 检查,正如您从 source code of resources.py 中看到的那样.

关于django - 在 django tastypie 中将 use_in 字段选项与 ModelResource 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22450227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com