Как мне автоматически наследовать поле модели Foreignkey в django rest? - PullRequest
2 голосов
/ 11 апреля 2020

enter image description here Models.py, From django admin, что я делаю, я могу добавить продукт в Featured, но проблема в том, что когда я выбираю продукт в admin, чтобы сделать его избранным, я хочу автоматически наследовать URL-адрес изображения этого продукта, который был загружен при создании этого продукта.

class Product(models.Model):
    seller = models.ForeignKey(Seller, on_delete=models.CASCADE)
    title = models.CharField(max_length=120, primary_key=True)

    image = models.FileField()
    def __str__(self):
        return self.title


class FeaturedProduct(models.Model):
    db_identification = models.CharField(max_length=120)
    featured = models.ForeignKey(Product, on_delete=models.CASCADE)

    photograph = How do I inherit it automatically from foreignkey product selected?
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.db_identification

Ответы [ 2 ]

2 голосов
/ 11 апреля 2020

На самом деле, это не очень хорошая идея дублировать изображение. Действительно, база данных разработана, чтобы избежать дублирования данных. В любом случае, в вашем коде, если вам нужно изображение Product для данного FeaturedProduct, вы можете использовать:

featured_product = FeaturedProduct.object.get(...)
image = feature_product.product.image

Таким образом, у вас нет дублирования. (Проще, например, в случае смены изображения!)

1 голос
/ 11 апреля 2020

Вы можете переопределить функцию сохранения FeaturedProduct

class FeaturedProduct(models.Model):
    db_identification = models.CharField(max_length=120)
    featured = models.ForeignKey(Product, on_delete=models.CASCADE)

    photograph = models.FileField(blank=True)
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.db_identification

    def save(self, *args, **kwargs):
        self.photograph = self.featured.image
        super(FeaturedProduct, self).save(*args, **kwargs)
...