Как вернуть файл изображения в модели Django (остальные рамки)? - PullRequest
0 голосов
/ 05 ноября 2018

Файл Models.py Мои модели

class Club(models.Model):
    club_name = models.CharField(max_length=256, blank=True, null=True)
    *some other flieds*

class ClubRequirment(models.Model):
    *some other flieds*

class ClubImage(models.Model):
    image = models.ImageField(upload_to='club_image/picture/', blank=True, null=True)
    club = models.ForeignKey(Club, null=True, on_delete=models.CASCADE, related_name='club_image')
    created_on = models.DateTimeField(auto_now_add=True)
    update_on = models.DateTimeField(auto_now=True)

    def __str__(self):
        return str(self.image)

Файл Serializer.py Сериализаторы:

class ClubImageSerializer(serializers.ModelSerializer):

    class Meta:
        model = ClubImage
        fields = "__all__"

class ClubRequirmentSerializer(serializers.ModelSerializer):

    class Meta:
       model = ClubRequirment
       fields = "__all__"

class ClubSerializer(serializers.ModelSerializer):
    club_requirment = serializers.SlugRelatedField(many=True,read_only=True,slug_field='text')
    club_image = serializers.StringRelatedField(many=True)

    class Meta:
        model = Club
        fields = ('id', 'club_name', 'club_image', 'club_requirment')

Выход ClubSerializer

   [
    {
        "id": 1,
        "club_name": "Test Club",
        "club_image": [
            "club_image/picture/pexels-photo-247932_2gnEgrn.jpeg",
            "club_image/picture/FB_IMG_1525249792281.jpg"
        ],
        "club_requirment": [
            "Hello Günter",
            "whats your name",
            "text"
        ]
    }
]the 

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

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Вы можете переопределить метод get_club_image, используя SerializerMethodField () , как указано в документации, чтобы сделать это.

views.py:

def club_view(request):
    obj = ClubImage.objects.all()
    club_serializer = ClubImageSerializer(obj, context={"request": request})
    ....

, а затем в вашем serializers.py

serializers.py:

class ClubImageSerializer(serializers.ModelSerializer):

    club_image = serializers.SerializerMethodField()

    class Meta:
      model = ClubImage
      fields = ("id","club","club_image")

    def get_club_image(self, obj):
      request = self.context.get('request')
      club_image = obj.image.url
      return request.build_absolute_uri(club_image)
0 голосов
/ 05 ноября 2018

Вы установили club_image как StringRelatedField, поэтому он рассматривается как строка. Вы должны использовать ModelSerializer, который вы написали для изображения.

class ClubSerializer(serializers.ModelSerializer):
    club_requirment = serializers.SlugRelatedField(many=True,read_only=True,slug_field='text')
    club_image = ClubImageSerializer(many=True)

    class Meta:
        model = Club
        fields = ('id', 'club_name', 'club_image', 'club_requirment')

Если вам нужны все изображения в одном массиве:

class ClubSerializer(serializers.ModelSerializer):
    club_requirment = serializers.SlugRelatedField(many=True,read_only=True,slug_field='text')
    club_image = ClubImageSerializer(many=True)

    class Meta:
        model = Club
        fields = ('id', 'club_name', 'club_image', 'club_requirment')

    def to_representation(self, instance):
        data = super().to_representation(instance)
        club_image = data.pop('club_image')
        club_image_array = [a.get('image') for a in club_image]
        data.update({'club_image': club_image_array})
        return data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...