【问题标题】:Tastypie detail_uri_name with forignkey's attribute带有forignkey属性的美味detail_uri_name
【发布时间】:2016-07-29 00:58:22
【问题描述】:

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

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()

还有一个相应的 sweetpie 资源,我想将 detail_uri_name 与 Django 用户类中的用户名一起使用。虽然,我不知道怎么做。

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 类的用户名。

【问题讨论】:

    标签: python mysql django api tastypie


    【解决方案1】:

    您不能将其他类属性用作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])
    

    【讨论】:

    • 这似乎是个好主意,我阅读了文档,它应该可以工作。但是当我重载get_bundle_detail_data 它实际上并没有被调用。我认为我在其他地方做错了什么,但如果您有任何见解,我将不胜感激。
    猜你喜欢
    • 2014-07-03
    • 2011-10-19
    • 2013-05-02
    • 2012-04-19
    • 1970-01-01
    • 2021-12-19
    • 2015-03-21
    • 1970-01-01
    • 2016-10-19
    相关资源
    最近更新 更多