Получение полного и точного определения атрибута модели Django - PullRequest
1 голос
/ 11 марта 2020

Предположим, что у меня есть User модель как эта:

class User(models.Model):
  first_name = models.CharField(max_length=30)
  last_name  = models.CharField(max_length=40, blank=True, null=True)
  password = models.CharField(min_lengj)
  connections = models.DecimalField(max_digits=3, default=0, blank=False)
  ...   (other attributes)

Для особого случая использования мне нужно знать точное определение его полей, чтобы я мог получить определение соединений как DecimalField с max_digits равно 3 и default равно 0 и не может быть blank. Как мне этого добиться?

1 Ответ

0 голосов
/ 12 марта 2020

Вы можете получить поля с помощью User._meta.get_fields(), который возвращает набор полей, определенных для этой модели. Кроме того, вы можете использовать User._meta.get_field('connections') для получения указанного поля c.

Это будет объект DecimalField с именем 'connections'. Вы можете проверить такие атрибуты, как .name и .max_digits (которые будут возвращать 3).

Кроме того, вы можете использовать метод .deconstruct() [Django -doc] для получения 4-х кортежей для этого поля, которые будут содержать: (1) имя поля; (2) тип поля в виде строки; (3) позиционные параметры в виде списка; и (4) именованные параметры в виде словаря.

Итак, для вашей User модели мы можем увидеть:

>>> User._meta.get_field('connections').deconstruct()
('connections', 'django.db.models.DecimalField', [], {'default': 0, 'max_digits': 3})
>>> User._meta.get_field('connections').blank
False
>>> User._meta.get_field('connections').max_digits
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...