我的问题类似于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
我会很感激任何不同的(更好的)解决方案。
答案 0 :(得分:0)
而不是:
qset = eval('self.%s.all()' % (cl))
做的:
photo_attr = getattr(self, cl)
qset = photo_attr.all()