Как найти значение поля с помощью foreignkey в Django

У меня есть следующие модели:

class Camera(models.Model):
    url = models.CharField(max_length=300, unique=True)
    camera_number = models.IntegerField(null=False, blank=False,
                                        validators=[
                                          MaxValueValidator(1000),
                                          MinValueValidator(1)])
    camera_name = models.CharField(max_length=100, null=False, blank=False)
    slug = models.SlugField(max_length=100, null=True, blank=False, unique=True)


class BaseImage(models.Model):
    url = models.ForeignKey(Camera, on_delete=models.CASCADE)
    base_image_filename = "base_images/" + str(Camera.slug) + "/%H"
    image = models.ImageField(max_length=300, upload_to=base_image_filename)

Я пытаюсь создать имя файла в BaseImage, которое содержит данные в переменной slug соответствующей записи Camera. Камера может иметь много BaseImage, но каждый BaseImage может соответствовать только одной камере.

В имени я получаю что-то вроде "base_images/<django.db.models.query_utils.DeferredAttribute object at 0x7f6006bd9b70>/20/camera_1.jpg".

Что мне нужно изменить, чтобы получить значение поля slug как часть имени файла ?

Вы можете указать метод и передать ссылку на этот метод:

from django.utils.timezone import now

class BaseImage(models.Model):
    def get_image_filename(self, filename):
        h = now().strftime('%H')
        return f'base_images/{self.url.slug}/{h}/{filename}'
    
    url = models.ForeignKey(Camera, on_delete=models.CASCADE)
    image = models.ImageField(max_length=300, upload_to=get_image_filename)
Вернуться на верх