使用Django中的抽象类从多对多中检索对象

时间:2011-10-05 00:47:54

标签: django django-models

我的问题类似于this,但在这种特殊情况下创建联结表并不好。

模特的简短片段:

class Item(models.Model):
    photos = models.ManyToManyField('Photo', blank=True, null=True, related_name='photo_in_%(class)ss')

    class Meta:
        abstract = True 

然后我有很多这样的类:

class Article(Item): pass
class BlogEntry(Item): pass
class Country(Item): pass
...

当然:

class Photo(models.Model):
    pass

例如a = Article()我可以轻松地在a.photos.all()

的文章中拍照

问题是:p = Photo()如何使用此照片检索所有对象?

可是:

通用关系不是一种选择。每张照片可以同时放在各种物品的照片中。

但是,我想出了这样一种方法。但它使用eval和 eval是邪恶的 ......

class Photo(models.Model):
    def get_items_with_photo(self):
        items = []
        for cl in [name for name in dir(self) if name.startswith('photo_in')]:
            qset = eval('self.%s.all()' % (cl))
            [items.append(item) for item in qset]
        return items

我会很感激任何不同的(更好的)解决方案。

1 个答案:

答案 0 :(得分:0)

而不是:

qset = eval('self.%s.all()' % (cl))

做的:

photo_attr = getattr(self, cl)
qset = photo_attr.all()