Задать вопрос
@larionov_n

Django. Как выставить атрибут в модели главное изображение(одно) из другого атрибута изображения (много)?

Пробовал сделать OneToOne с ссылкой на Image, вылезала ошибка constraint unique error, делал миграции, проставлял unique true, verbose_name. Не помогало. Сделал, таким образом как отдельный ImageField. Но, мне кажется это полный костыль. Второй вариант использовать атрибут main у Image. И потом в модели делать цикл по изображениям и матчить его. (Лишний код, лишний запрос, костыль, логика во view, в админке будет у Image Boolean). Тоже самое если сделать у Auto (main_image_id: Integer Field и матчить его, в админке будет тупо цифра). Как сделать правильно?

def get_image_path(instance, filename):
    return os.path.join('photos', str(instance.id), filename)

class Image(models.Model):

    name = models.CharField(max_length=90)
    file = models.ImageField(upload_to=get_image_path, blank=True,  null=True)
    main = models.BooleanField(default=False)

    def __str__(self):
        return "%s" % self.name


class Auto(models.Model):

    name = models.CharField(max_length=40)
    year = models.IntegerField()
    public_date = models.DateField()
    model = models.CharField(max_length=40)
    price = models.IntegerField()
    views = models.IntegerField()
    rating = models.IntegerField()
    description = models.CharField(max_length=200)
    images = models.ManyToManyField(Image)
    main_image = models.ImageField(upload_to=get_image_path, blank=True, null=True)

    def __str__(self):
        return "%s %s" % (self.name, self.model)

    class Meta:
        ordering = ('name', 'price')
  • Вопрос задан
  • 262 просмотра
Подписаться 3 Оценить 1 комментарий
Решения вопроса 1
sim3x
@sim3x
хотя скорее всего нужно
https://docs.djangoproject.com/en/1.8/ref/models/f...

images = models.ManyToManyField(Image, related_name="auto_list")
main_image = models.OneToOneField(Image, related_name="auto")


Related_name naming
stackoverflow.com/questions/2642613/what-is-relate...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы