Tastypie detail_uri_name 具有 forignkey 的属性

Tastypie detail_uri_name with forignkey's attribute

我在 django 中用我自己的用户 class 扩展了 User Django class:

class MyUser(models.Model):
     user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, related_name='my_user')
     theme = models.IntegerField(default=0)
     tags = TaggableManager()

以及相应的 tastypie 资源,我想使用 detail_uri_name 和来自 Django 用户 class 的用户名。虽然,我不知道如何。

class MyUserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        allowed_methods = ['get']
        detail_uri_name = 'user_username'# ????

我遇到的错误是:'MyUser' object has no attribute 'user__username'

如何从 MyUser 访问 username 作为属性?

行是:

 detail_uri_name = 'user_username'# ????

从 shell 我可以 MyUser.objects.all()[0].user.username 获取关联的 django class 的用户名。

您不能将其他 class 属性用作 detail_uri_name

但是,理论上:

class MyUserResource(ModelResource):
    class Meta:
        queryset = User.objects.all().select_related('user')
        allowed_methods = ['get']
        detail_uri_name = 'user__username'

    def get_bundle_detail_data(self, bundle):
        attrs = self._meta.detail_uri_name.split('__')
        return getattr(getattr(bundle.obj, attrs[0]), attrs[1])