Присвоение значений результату запроса, уже настроенному с помощью внешнего ключа

#django

#django

Вопрос:

У меня есть база данных выставочных списков, связанных внешним ключом с базой данных мест, где они проводятся. Шаблоны Django получают доступ к информации о месте проведения в результатах запроса через listing.venue.name , listing.venue.url и так далее.

Однако некоторые выставки проводятся во временных местах, и эта информация хранится в той же базе данных, что и было бы listing.temp_venue_url и тому подобное. Поскольку кажется расточительным и печальным помещать условные обозначения по всем шаблонам, я хочу переместить информацию для временных площадок туда, где шаблоны ожидают информацию для обычных площадок. Это не сработало:

 def transfer_temp_values(listings):
    for listing in listings:
        if listing.temp_venue:
            listing.venue = Venue
            listing.venue.name = listing.temp_venue
            listing.venue.url = listing.temp_venue_url
            listing.venue.state = listing.temp_venue_state
            listing.venue.location = listing.temp_venue_location
  

Ошибка удивила меня:

 ValueError at /[...]/
Cannot assign "<class 'myproject.gsa.models.Venue'>": "Exhibition.venue" must be a "Venue" instance.
  

Я скорее думал, что это так. Как мне это сделать?

Ответ №1:

Сообщение об ошибке связано с тем, что вы назначили класс Venue списку, а не его экземпляру. Вам нужно вызвать класс, чтобы получить экземпляр:

 listing.venue = Venue()
  

Комментарии:

1. Спасибо, Дэниел. (facepalms)