我有一个与用户有OneToOne关系的个人资料模型。对于这样的Profile模型,我使用以下类,它使用直接来自User的两个附加字段:
class ProfileResource(ModelResource):
username = fields.CharField(attribute='user__username')
email = fields.CharField(attribute='user__email')
class Meta:
# Base data
queryset = Profile.objects.all()
# Allowed methods
list_allowed_methods = ['get']
detail_allowed_methods = ['get', 'put', 'patch']
# Security setup (FEEBLE)
authorization = Authorization()
authentication = BasicAuthentication()
在咨询配置文件时,此类资源可正常运行。它完美地检索用户名和电子邮件,并且能够通过这些参数进行过滤和排序。 但是,我无法以优雅的方式更新User模型上的这些字段。我想出的就是:
def obj_update(self, bundle, skip_errors=False, **kwargs):
bundle = super().obj_update(bundle, skip_errors=skip_errors, **kwargs)
if 'username' in bundle.data: bundle.obj.user.username = bundle.data['username']
if 'email' in bundle.data: bundle.obj.user.email = bundle.data['email']
bundle.obj.user.save()
return bundle
哪种方法很好,但似乎不是最好的解决方案。
有人知道更好的方法来计算资源和相关模型之间的这种仅限字段的关系吗?