2013-04-10 2 views
0

У меня есть некоторые модели, которые включают названия, начинающиеся с «.». Я написал небольшую вспомогательную функцию помощника регулярного выражения, чтобы переместить «до» (например, «Dogg Pound» -> «Dogg Pound, The»). Проблема в том, что я продолжаю получать NameError: name 'self' is not defined, когда пытаюсь проверить мои модели. Я не совсем уверен, почему это должно быть, поскольку я не думаю, что я делаю что-то другое, чем примеры методов модели на веб-сайте. Мой код:«self» в Django Методы модели

from django.db import models 
import re 


def de_the(s): 
    m = re.match(r'(th[ea]) (.*)', s, re.I | re.U) 
    if m: 
     return '{}, {}'.format(m.group(2), m.group(1)) 
    else: 
     return s 
... 
class Album(models.Model): 
    album = models.CharField(max_length=255, null=True, blank=True) 
    artist = models.ForeignKey('Artist', null=True, blank=True) 
    year = models.IntegerField(unique=False, null=True, blank=True) 

    def _get_sort_name(self): 
     return de_the(self.__unicode__()) 

    def __unicode__(self): 
     try: 
      return self.album 
     except AttributeError, TypeError: 
      return None 

    s_n = property(_get_sort_name) 
    sort_name = models.CharField(max_length=255, null=True, blank=True, default=self.s_n) 


class Meta: 
    ordering = ["sort_name"] 

Любые предложения?

ответ

1

В модели class Album:

sort_name = models.CharField(max_length=255, null=True, blank=True, default=self.s_n) 

self.s_n должен быть только s_n

sort_name = models.CharField(max_length=255, null=True, blank=True, default=s_n) 
Смежные вопросы