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])
我在 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])