У меня есть часть проекта Django, которая включает в себя отправку квартирных приложений в систему, и я замечаю странное поведение при поиске приложения с использованием ORM, а затем превращаю объект в dict, вызывающий __dict__
для предварительного заполненияформа.
Мне любопытно, кто-нибудь может объяснить, что происходит, или что я делаю неправильно.По сути, у меня есть внешний ключ в моей модели UnitApplication
, поэтому приложения сопоставляются со свойствами, имя этого столбца базы данных и имя атрибута в моей модели равно property_id
, однако, когда я превращаю объект в словарь, он добавляет дополнительный _id
к названию поля.
Вот мой код:
application_id = request.GET.get('application_id')
application = UnitApplication.objects.using(db_alias).get(id=application_id)
# this is in a view so property_id == Property Object (1)
print(application.property_id)
# this will print my actual property_id, which is 1
print(application.property_id.id)
# this is the odd behavior, here is the dict that prints, and hinders form filling
# {..., 'property_id_id': 1, ...}
print(application.__dict__)
Что происходит?Я могу исправить это, отредактировав диктат, но я чувствую, что это глючит.
Вот соответствующие части моей модели, если вам интересно мое именование:
class Property(models.Model):
# I know this isn't needed but it makes me feel better seeing it here
id = models.AutoField(primary_key=True)
rental_add_ons = models.ManyToManyField('RentalAddOns', related_name='rental_add_ons')
date_added = models.DateTimeField(auto_now_add=True, editable=False)
...
class UnitApplication(models.Model):
# property id, set to null if property removed from db
property_id = models.ForeignKey('Property',
null=True,
on_delete=models.SET_NULL,
db_column='property_id')
Примечание: Я использую обычный Form
для этого, потому что это дало мне немного больше свободы, я не ищу предложений по изменению этого варианта использования Model Form
, я сделал это, ихотя этой проблемы там не бывает, она не была идеальной для моих нужд.