python - 无法从查询集中获取对象

标签 python django

下面的代码应将 AD 的“内容”字段中的所有 \[\[(.+)\]\] 匹配项替换为 ADResource 的 src,其中 (.+) 是别名

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

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

它捕获 [[res]] 或 [[Similac]] 上的DoesNotExist 异常并返回“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)

但是这段代码正在工作,我得到了 src 字段的 url:

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

最佳答案

哦,愚蠢的问题,我得到的不是字符串而是正则表达式对象,并且我的匹配位于第一个子组中。

self.content = re.sub(r'\[\[(.+)\]\]', lambda m: ADResource.objects.all().get(alias=m.group(1)).src.url, self.content)

关于python - 无法从查询集中获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6809180/

相关文章:

python - 如何注释所有峰值

python - 根据另一个数据框中的行查询一个数据框行并比较值

python - django-debug-toolbar: 'Template' 对象没有属性 'engine'

python - AUTH_USER_MODEL 指的是尚未安装的型号 '%s'”

检查某些东西是否存在的Pythonic方法?

python - 如何在Python中将文本文件转换为JSON?

python - 从 django tastypie 中的多个表返回 json 输出

Django 模型 : NULLable field

django - 如何使用 django 模板语言以一对多关系访问另一个表的属性?

python - 根据外键对django对象进行分组