2014-10-11 84 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