Проверьте, есть ли у модели определенные атрибуты, и если она найдена, проверьте, есть ли у нее значения - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть 2 модели Django, очень похожие:

class ImageUp(models.mode)l:

    image = models.ImageField(upload_to=file_upload_to)
    additional_image_types = JSONField(null=True, blank=True)
    filename = models.CharField(max_length=255, blank=True, null=True)


class LogoUp(models.model):

    logo = models.ImageField(upload_to=file_upload_to)
    additional_logo_types = JSONField(null=True, blank=True)
    filename = models.CharField(max_length=255, blank=True, null=True)

Я извлекаю экземпляры моделей из базы данных и хочу выполнить некоторые манипуляции с изображениями / логотипами, поэтому я проверяю наличие атрибутов:

try:      
    additional = obj.getattr( f'additional_{attr_name}_types')
except AttributeError:
   .....

attr_name, я получил в качестве параметра, и может быть «логотип» или «изображение», но я все еще делаю проверку, в случае, если неправильный «префикс» был отправлен additional_.., может бытьNULL, JSON пуст или JSON со значениями

Я получаю 2 ошибки:

  object has no attribute 'getattr'
  getattr(): attribute name must be string # if I check type of `f string` is <str>

Итак, я хочу знать, если это и image или logo, если addtional.. имеет значения

1 Ответ

0 голосов
/ 21 февраля 2019

getattr не является методом для объекта;это встроенная функция.Вам необходимо:

additional = getattr(obj, f'additional_{attr_name}_types')

( реализовано с помощью метода __getattr__, но не следует вызывать методы с двойным подчеркиванием напрямую.)

...