Найти - Пользователи
Полная версия: object + 'str' = new object
Начало » Django » object + 'str' = new object
1
info.rss
Есть абстракная модель, чтобы не плодить код ниже в каждой дочерней моделе, делаю так:
def img(self):
        self_class_name = eval(self._meta.object_name+'Img')
        return self_class_name.objects.filter(rel=self)
но вроде как eval это не безопасно, не понимаю почему может кто объяснит или может есть другие варианты
Спасибо
FishHook
а разве эту задачу не решает related_name?
info.rss
related_name задается определено, а здесь, к примеру
class Abstarct(models.Model):
  def img(self):
        self_class_name = eval(self._meta.object_name+'Img')
        return self_class_name.objects.filter(rel=self)
class A(Abstarct):
  title=....
class AImg(models.model):
  rel = models.FK(A)
  img = models.ImageField(...)
class B(Abstarct):
  title=....
class BImg(models.model):
  rel = models.FK(A)
  img = models.ImageField(...)

…или я что-то не понял?
FishHook
info.rss
…или я что-то не знаю
Наверно, я чего то не понял

self_class_name = eval(self._meta.object_name+'Img')

self_class_name = self.__class__.__name__ + 'Img'

нет?
info.rss
если сделать просто:
self.__class__.__name__ + 'Img'
то он это выражение рассматривает потом как строку
'str' object has no attribute 'objects'
FishHook
А, ну да.
Тогда так
from django.db.models.loading import get_model
info.rss
get_model('app', 'Model')
выдает app.Model
а как получить ModelImg
это не правиьно, но хотелось бы:
get_model('Model'+'Img')
где Img это str, а Model динамичное имя дочерней модели
FishHook
Вроде два раза показал же

self.__class__.__name__ + 'Img'
Что осталось - нагуглить, как получить модель по имени. Вроде тоже показал. Не работает?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB