2013-03-18 72 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

其實運算正在尋找一個模特的*場*類,而不是類模型本身的。 – 2013-03-18 15:25:48

+0

謝謝,我現在覺得有點傻,因爲不記得我能做到這一點! – Jharwood 2013-03-18 15:33:04

+0

@brunodesthuilliers是對的我確實需要字段類,但是如果你有像我這樣的類的實例,那麼它只是調用'instance .__ class __.__ name__'的一個例子。 – Jharwood 2013-03-18 15:34:49

0
fld_cls = type(model_instance._meta.get_field(fieldname))