Как получить имя поля в зависимости от типа поля? - PullRequest
0 голосов
/ 17 мая 2019

Я хочу получить имя поля и выполнить с ним некоторую операцию в зависимости от типа поля.

Допустим, модель:

class Model1(models.Model):
    m1 = models.FileField(...)
    m2 = models.CharField(...)
    m3 = models.IntegerField(...)

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

Я думал об использовании мета-словаря. Это метод, который я создал:


from django.db.models.fields.files import FieldFile
def method_name(instance):
    for nm, cls in instance.__dict__.items():
        if type(cls) is FieldFile:
             instance.nm.delete()

Вышеуказанный метод не работал, так как тип для файлового поля 'str', а не файловое поле. Я буду признателен за любые решения.

1 Ответ

1 голос
/ 17 мая 2019

Я думаю, вы могли бы использовать _meta для этого (если экземпляр является экземпляром модели)

from django.db.models.fields.files import FileField
def method_name(instance):
    for field in instance._meta.fields:
        # field.name - this returns the field name
        if isinstance(field, FileField):
            # do something
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...