как восстановить поля внешнего ключа только в запросе на получение с использованием django - PullRequest
0 голосов
/ 14 января 2019

У меня есть такая модель:

class Image(models.Model):
    name=models.CharField(max_length=40,unique=False)
    image=models.ImageField(upload_to='photos/%Y/%m/%d')

class Resized_image(models.Model):
    image = models.ForeignKey(Image, related_name='resized_images', on_delete=models.CASCADE)
    rendition = models.ForeignKey(Rendition,related_name='rendition_id',on_delete=models.CASCADE)
    path = models.CharField(max_length=256,unique=False)

Я указываю поле изображения таблицы Image в качестве внешнего ключа в модели Resized_image, поэтому, если я выполняю запрос get, я также должен получить путь, присутствующий в таблице Resized_image, как я могу это сделать?

когда я запускаю запрос на получение изображений, я получаю вывод, подобный этому:

{
            "id": 1,
            "name": "xyz1",
            "image": "http://10.75.12.175:7010/photos/2019/01/10/73440005-078.jpg"
}

но я хочу, чтобы путь Resized_image также находился внутри запроса get

Я пытаюсь так в сериализаторе:

class resized_imagesSerializer(serializers.ModelSerializer):
     class Meta:
         model = Resized_image
         fields = ('path',)
        read_only_fields = ['path']

class imagesSerializer(QueryFieldsMixin,serializers.ModelSerializer):
        resized_images = resized_imagesSerializer(many=True,required=False)
        class Meta:
        model = Image
        fields = ('id','name','image','resized_images')
        read_only_fields =['resized_images']

если я попытаюсь сделать это даже в пост-запросе, я получу это поле resized_images Есть ли способ ее решить?

1 Ответ

0 голосов
/ 14 января 2019

Вы можете получить доступ к ImageField URL-адресу <field_name>.url. Если a является экземпляром Resized_image, a.image.url - это URL вашего изображения. Таким образом, вы можете получить URL в методе save.

class Resized_image(models.Model):
    image = models.ForeignKey(Image, related_name='resized_images', on_delete=models.CASCADE)
    rendition = models.ForeignKey(Rendition,related_name='rendition_id',on_delete=models.CASCADE)
    path = models.CharField(max_length=256,unique=False)

    def save(self, *args, **kwargs):
        self.path = self.image.url
        super().save(*args, **kwargs)
...