Не удается получить объект из набора запросов - PullRequest
0 голосов
/ 24 июля 2011

Код ниже должен заменить все \[\[(.+)\]\] совпадения в поле «содержимое» AD на src ADResource, где (.+) - псевдоним

[[Similac]] & rarr; media/banners/2011/07/24/ad1.gif

[[res]] & rarr; media/banners/2011/07/24/ad2.png

Он перехватывает исключение DoesNotExist для [[res]] или [[Similac]] и возвращает строки res или Similac.

ADResource table contents:
id   alias      src 
----------------------------------------------------
1    Similac    media/banners/2011/07/24/ad1.gif
2    res        media/banners/2011/07/24/ad2.png


class ADResource(models.Model):
    alias = models.CharField(max_length=256)
    src = models.FileField(upload_to="media/banners/%Y/%m/%d/")  

class AD(models.Model):
    content = models.CharField(max_length=10000)

    def getResourceURL(object, object_alias):
        try:
            return ADResource.objects.all().get(alias="%s" % object_alias).src.url
        except ADResource.DoesNotExist:
            return object_alias

    def save(self, **kwargs):
        self.content = re.sub(r'\[\[(.+)\]\]', AD.getResourceURL(self, r'\1'), self.content)
        super(AD, self).save(**kwargs)

Но этот код работает, и я получаю URL поля src:

return ADResource.objects.all().get(alias='res').src.url

1 Ответ

0 голосов
/ 25 июля 2011

О, глупый вопрос, я получаю не строку, а объект регулярного выражения, и мое совпадение в первой подгруппе.

self.content = re.sub(r'\[\[(.+)\]\]', lambda m: ADResource.objects.all().get(alias=m.group(1)).src.url, self.content)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...