2017-03-19 12 views
1

このモデルでget_picture(self)メソッドをシリアル化する方法は?私はソーシャルネットワークを開発しています。このメソッドをシリアル化して、アンドロイドアプリでユーザープロファイルの画像を処理するためのjson URLを取得する必要があります。モデル内のメソッドをどのようにシリアル化しますか?

class Profile(models.Model): 
    user = models.OneToOneField(User) 
    location = models.CharField(max_length=50, null=True, blank=True) 
    url = models.CharField(max_length=50, null=True, blank=True) 
    job_title = models.CharField(max_length=50, null=True, blank=True) 

    class Meta: 
     db_table = 'auth_profile' 

    def __str__(self): 
     return self.user.username 

    def get_url(self): 
     url = self.url 
     if "http://" not in self.url and "https://" not in self.url and len(self.url) > 0: # noqa: E501 
      url = "http://" + str(self.url) 

     return url 

    def get_picture(self): 
     no_picture = 'http://trybootcamp.vitorfs.com/static/img/user.png' 
     try: 
      filename = settings.MEDIA_ROOT + '/profile_pictures/' +\ 
       self.user.username + '.jpg' 
      picture_url = settings.MEDIA_URL + 'profile_pictures/' +\ 
       self.user.username + '.jpg' 
      if os.path.isfile(filename): 
       return picture_url 
      else: 
       gravatar_url = 'http://www.gravatar.com/avatar/{0}?{1}'.format(
       hashlib.md5(self.user.email.lower()).hexdigest(), 
       urllib.urlencode({'d': no_picture, 's': '256'}) 
       ) 
       return gravatar_url 

      except Exception: 
       return no_picture 

答えて

0

SerializerMethodFieldを使用してください。

シリアライザファイルにあります。

# serializers.py 

from rest_framework import serializers 

class ProfileSerializer(serializers.ModelSerializer): 
    get_picture = serializers.SerializerMethodField() 

あなた models.py

# models.py 

class Profile(models.Model): 
    ... 

    class Meta: 
     model = Profile 

    def get_picture(self): 
     no_picture = 'http://trybootcamp.vitorfs.com/static/img/user.png' 
     try: 
      filename = settings.MEDIA_ROOT + '/profile_pictures/' +\ 
       self.user.username + '.jpg' 
      picture_url = settings.MEDIA_URL + 'profile_pictures/' +\ 
       self.user.username + '.jpg' 
      if os.path.isfile(filename): 
       return picture_url 
      else: 
       gravatar_url = 'http://www.gravatar.com/avatar/{0}?{1}'.format(
       hashlib.md5(self.user.email.lower()).hexdigest(), 
      urllib.urlencode({'d': no_picture, 's': '256'}) 
      ) 
       return gravatar_url 
     except Exception: 
      return no_picture 
関連する問題