Пробовал сделать 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')