Как получить значение атрибута модели по ForeignKey?

Добрый день!

имеются две модели:


class Hotel(models.Model):
    name = models.CharField('Наименование отеля', max_length=150)   
    #я убрал здесь некоторые поля
    slug = models.SlugField(max_length=150, unique=True)

    def __str__(self):
        return self.name

class HotelImage(models.Model):
    hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE, verbose_name='Отель')
    
    #slug = ... (здесь я хочу получить slug из класса Hotel)

    image = models.ImageField(upload_to=get_upload_path)


Мне нужно получить атрибут slug из модели Hotel чтобы передать ее в функцию get_upload_path, которая переименовывает файл и формирует путь для его загрузки. С другими моделями где поле slug создано так: slug = models.SlugField(max_length=150, unique=True) - функция работает.

я пробовал так:

slug = Hotel.slug
#Ошибка: HotelImage has no field named 'slug'

slug = str(Hotel.slug)
#Ошибка: Storage can not find an available filename for "img_hotels\<django.db.models.query_utils.DeferredAttribute object at 0x000000A1639F5310>\django.db.models.query_utils.DeferredAttribute_object_at_0x000000A1639F5310-3d6ae_VIhJkIQ.jpg". Please make sure that the corresponding file field allows sufficient "max_length".


во-втором случае вроде бы функция срабатывает, но ей передается не значение поля slug, а какие-то его "внутренности" в строковом представлении, длина которых слишком велика.

Подскажите, пожалуйста, куда копать? Может быть это поле нужно получать через метод класса?

Спасибо!
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
@bacon
HotelImage has no field named 'slug'
тебе же явно пишут что ты работаешь с объектом HotelImage, где у этого касса slug? Так что надо Hotel.hotel.slug. Ну и называть экземпляр класса именем существующего класса, очень плохая идея, ну и про pep8 прочитай.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
07 мар. 2021, в 03:18
1500 руб./за проект
06 мар. 2021, в 22:58
70000 руб./за проект
06 мар. 2021, в 22:36
10000 руб./за проект