2013-03-18 3 views
0

Я обрабатываю некоторые случаи кросс-кода в некотором коде django, и я сталкиваюсь с проблемой, которая встречается только при использовании определенных полей.Получение имени класса, который задает поле модели

Я хочу, чтобы уметь определять класс, который использует Модель для поля, и в зависимости от того, какова будет смена результата в альтернативной логике.

Я пытался использовать get_internal_type() на экземпляре поля, но он просто возвращает "BooleanField" и не ожидается "ModifiedField"

типа поля:

class ModifiedField(models.BooleanField): 
    def __init__(self, *args, **kwargs): 
     kwargs['editable'] = False 
     models.BooleanField.__init__(self, *args, **kwargs) 

    def pre_save(self, model_instance, add): 
     value = getattr(model_instance, self.attname) 

     if add: 
      return True 
     elif value == 2: 
      return False 
     else: 
      return True 

Модель:

class TemplateItem(models.Model): 
    uuid = UUIDField(primary_key=True) 
    name = models.CharField(null=False, blank=True, max_length=255) 
    image = models.ImageField(_('Image'), upload_to=_template_image_upload_path, 
           storage=item_fs, null=True, blank=True) 
    is_modified = ModifiedField() 

ответ

1

Вы пробовали класс ._ имя _ ??

g = TemplateItem.objects.get(id=1) 
g.__class__.__name__ 
+0

Собственно оп ищет * поле * Класс A модели, а не класс самой модели. –

+0

Спасибо, я чувствую себя глупо сейчас, потому что не помню, что могу это сделать! – Jharwood

+0

@brunodesthuilliers прав Я действительно хочу класс поля, но если у вас есть экземпляр класса, как я, то это просто случай вызова 'instance .__ class __.__ name__' – Jharwood

0
fld_cls = type(model_instance._meta.get_field(fieldname)) 
Смежные вопросы