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

使用Django中的抽象类从多到多检索对象,django,django-models,Django,Django Models,我的问题类似于,但在这种特殊情况下创建连接表并不好 模型的简短片段: 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 cla

我的问题类似于,但在这种特殊情况下创建连接表并不好

模型的简短片段:

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是邪恶的

如果有任何不同(更好)的解决方案,我将不胜感激。

而不是:

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

而不是:

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


谢谢-非常好!我假设没有类似Django的方法来做这样的事情?为什么在Python方法已经起作用的情况下有类似Django的方法呢?不需要重新发明轮子。如果效果很好,你应该接受答案!只是因为在建模和处理Django的ORM时,并非所有Python方法都能很好地工作。我知道我应该接受你的回答,但有什么急事吗?谢谢-非常好!我假设没有类似Django的方法来做这样的事情?为什么在Python方法已经起作用的情况下有类似Django的方法呢?不需要重新发明轮子。如果效果很好,你应该接受答案!只是因为在建模和处理Django的ORM时,并非所有Python方法都能很好地工作。我知道我应该接受你的回答,但有什么急事吗?
photo_attr = getattr(self, cl)
qset = photo_attr.all()