2016-07-29 63 views
0

我有一個在Django用我自己的用戶類擴展了User Django的類:Tastypie detail_uri_name與forignkey的屬性

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 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'# ???? 

從貝我可以做MyUser.objects.all()[0].user.username來獲得相關的Django類的用戶名。

回答

2

您不能將其他類屬性用作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]) 
+0

這似乎是一個好主意,我閱讀文檔,它應該工作。但是當我重載'get_bundle_detail_data'時,它實際上並沒有被調用。我認爲我在其他地方做錯了事,但如果你有任何見解,我將不勝感激。 – Tsangares