2014-10-11 126 views
0

請幫忙解決問題。如何獲取字段繼承模型?

我有一個模型:

class UserProfile(User):    
    gender = models.ForeignKey(
     Gender, 
     verbose_name='Пол', 
     blank=True, 
     null=True, 
    ) 
    nickname = models.CharField(
     'Отображаемое имя', 
     max_length=50, 
     blank=False, 
    ) 
    phone = models.CharField(
     max_length=50, 
     blank=False, 
    ) 
    skype = models.CharField(
     max_length=50, 
     blank=False, 
    ) 
    other = models.TextField(
     max_length=500, 
     blank=False, 
    ) 
    avatar = models.ImageField(
     upload_to='userprofile/avatar/', 
     blank=True, 
     null=True, 
    ) 

    objects = UserManager() 

    @classmethod 
    def get_new_authors_entries(self, cut_begin=0, cut_end=2): 
     return self.objects.filter(is_active=1, is_superuser=0)[cut_begin:cut_end] 

方法get_new_authors_entries()返回以下字段:

[ 
    { 
     "fields": 
      { 
       "skype": "dfsdf", 
       "user_permissions": [], 
       "other": "zzzz", 
       "nickname": "\u0418\u0432\u0430\u043d \u0422\u0443\u0440\u0433\u0435\u043d\u0435\u0432 \u0451\u043f\u0442\u0430", 
       "gender": 1, 
       "avatar": "", 
       "phone": "2014-0921", 
       "groups": [] 
      }, 

     "model": "app_accounts.userprofile", 
     "pk": 4 
    }, 

    ....., 
    ....., 
    .... 
] 

,但我需要的字段的值: 'date_joined','用戶名','電子郵件'

UserProfile從User繼承。我不明白爲什麼我不能到田裏訪問:「date_joined」,「用戶名」,「電子郵件」

views.py(片段):

new_authors = UserProfile.get_new_authors_entries(cut_begin=page_new_authors, cut_end=page_new_authors + 2) 

result = serializers.serialize('json', new_authors) 

return HttpResponse(json.dumps(result), content_type='application/json')  

回答

0

我建議不繼承用戶,而是將自己的模型配置爲具有對用戶的外鍵引用。無論哪種方式,你沒有看到任何用戶模型字段的原因是因爲序列化程序默認不會執行「深度序列化」。你將不得不實現一個適當序列化的自定義序列化程序。

看一看湯姆·克里斯蒂的舊解決方案,如果你想有一個開始的地方:https://github.com/tomchristie/django-serializers

如今,這在很大程度上是包裹成Django的REST的框架。恕我直言,對於簡單的用例來說,使用標準的json模塊來推出自己的序列化程序並不是太多工作。它也讓你完全控制你的結果JSON的結構,這可以很好。的Django的最新版本甚至有一個內置JsonResponse所以你可以做類似如下:

#at the end of your view 
    import json 
    response_data = json.dumps(serialize_data(user,profile)) 
    return JsonResponse(response_data, status=200) 

def serialize_data(user, profile): 

    my_dict = { 
     'username': user.username, 
     'date_joined': user.date_joined 
     #... and so on 
    } 

    return my_dict 
0

也許是因爲這是一個類方法,所以應該接受CLS和內部使用的,而不是自我CLS。

+0

在我的手機上,對不起 – 2014-10-11 17:05:17