2
我的問題類似於this,但在此特定情況下創建聯結表並不好。在Django中使用抽象類從多對多檢索對象
模型的一小段:
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
我將不勝感激任何不同的(更好的)解決方案。
謝謝 - 偉大工程!我認爲沒有類似Django的方法來做這樣的事情? – laszchamachla
爲什麼在Python方法已經工作時有類似Django的方法?沒有必要重新發明輪子。如果它運作良好,你應該接受答案! – Etienne
只是因爲在建模和處理Django的ORM時,並不是每個Python方法都能很好地工作。我知道我應該接受你的答案 - 但是什麼是快點;)? – laszchamachla