Доступ к атрибуту модели django, переданному в качестве параметра

#django

#django

Вопрос:

Я использую django с устаревшей базой данных, где я не могу изменить исходные столбцы таблицы. У меня есть похожие модели, которые имеют слегка отличающиеся имена полей. Следующая модель является примером.

 class EURegister(models.Model):
    record_id = models.AutoField(primary_key=True)
    reg_no = models.CharField(max_length=45, blank=True, null=True)
    company_name = models.CharField(max_length=300, blank=True, null=True)
  

В некоторых моделях reg_no используется другое имя, например registration_id . Следовательно, я должен получить доступ к атрибуту модели, переданному в качестве аргумента. Но я не могу его использовать, поскольку модель не позволяет использовать атрибуты, поскольку они были dict ключами. Выдает следующую ошибку.

 TypeError: 'EURegister' object is not subscriptable
  

Ответ №1:

Вы можете использовать getattr(…) [python-doc]:

 getattr(myeuregister, 'reg_no')  

So getattr(x, 'y') эквивалентно x.y .

При этом, если разные модели (очень) похожи, может иметь смысл «объединить» эти модели в одну модель. Использование разных таблиц для одних и тех же типов объектов часто не очень хороший дизайн.