2017-03-18 3 views
0

私はクラスに561のフィールドを持っているので、このクラスのすべてのフィールドのリストを表示するのにメタクラスを使用できますか?ここでメタクラスを使用しているすべてのfiedのリストを表示

は、私がこれまでにやっていることである。ここでは

@python_2_unicode_compatible 
class EmployerProfile(AbstractAddress): 
    customer = models.OneToOneField(
     CustomerProfile, verbose_name=_('Customer'), 
     related_name='employerprofile') 

    company_name = models.CharField(_('Company name'), 
            max_length=50, blank=True, null=True) 
    phone = PhoneField(_('Phone'), max_length=50, blank=True, null=True) 
    phone_extension = models.CharField(_('Extension'), max_length=10, 
             blank=True, null=True) 
    job_title = models.CharField(_('Job title'), max_length=50, blank=True, 
           null=True) 
    date_hired = models.DateField(_('Date hired'), blank=True, null=True) 
    supervisor_name = models.CharField(_('Supervisor name'), max_length=50, 

... 
             blank=True, null=True) 
    has_missing_fields = models.BooleanField(_('Has missing informations'), 
              default=True) 
    manual_validation = GenericRelation(ManualFieldValidation) 

は私がメタクラスに事前に

def clean_fields(self): 
     if income_source != 'Employed': 
      to_empty = [ 
       "company_name", 
       "job_title", 
       "date_hired", 
       "supervisor_name", 
       "phone", 
       "phone_extension", 
       "civic_number", 
       "street", 
       "address_line_2", 
       "city", 
       "state", 
       "zip_code", 
       ... 
      ] 
      for field_name in to_empty: 
       setattr(self, field_name, None) 
     super(EmployerProfile, self).save(*args, kwargs) 

感謝を使って変更したい機能です!

+0

あなたが今まで試みたことを投稿してください。 – James

+0

@Jamesそれは終わった? –

答えて

0

あなたはこのようなモデルのフィールド名を取得することができます。

field_names = [f.name for f in EmployerProfile._meta.get_fields()] 

をしたり、フィールドのインスタンスをしたい場合は、単純に実行します。あなたのモデルインサイド

field_inst = EmployerProfile._meta.get_fields() 

は、あなたがこのようにそれを行うことができます。

class EmployerProfile(AbstractAddress): 
    # model fields 

    @classmethod 
    def field_names(cls): 
     return [f.name for f in cls._meta.get_fields()] 
+0

私はこの方法に少し慣れていますが、クラス内にメタクラスを作成する必要があります。このメソッドを使用する関数を変更できますか? –

+0

それで、モデルフィールド名を 'Meta'クラスの中から見たいと言っていますか? –

+0

いいえ、正確ではありません。私は、 'field_names = [EmployerProfile._meta.get_fields()]'のfには、fを使用するためにメタクラスを作成する必要があると考えました。 –

関連する問題