2017-03-19 1 views
1

Wie eine get_picture (self) -Methode in diesem Modell zu serialisieren? Ich entwickle ein soziales Netzwerk und ich muss diese Methode serialisieren, um eine JSON-URL für das Benutzerprofilbild zu erhalten, um es in Android-App zu handhaben.Wie serialisiert man eine Methode in einem Modell?

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 

Antwort

0

Verwenden Sie eine SerializerMethodField dafür.

In Ihrer Serializer-Datei.

# serializers.py 

from rest_framework import serializers 

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

Ihre models.py als

ist
# 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 
Verwandte Themen