Сохраните некоторые поля из одной модели в другую. Когда я создаю новость, я хочу, чтобы поля title, mainphoto, created и gallery_news были сохранены в модели Photo.

Когда я создаю новость, я хочу, чтобы поля title, mainphoto, created и gallery новости были сохранены в модели Photo. Я пытался сделать это методом save в serializers.py, но это не сработало. Кто-нибудь может помочь мне с этой проблемой

models.py


class News(models.Model):
    title = models.TextField(blank=True, verbose_name='Название')
    mainphoto = ThumbnailerImageField(upload_to='images/', null=True, verbose_name='Фото', help_text='Размер фотографии должен быть 1200x550')
    created = models.DateField(verbose_name='Дата создания')

    class Meta:
        verbose_name = 'Новость'
        verbose_name_plural = 'Новости'
        ordering = ('-created',)

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


class Gallery(models.Model):
    image = models.ImageField(blank=True, null=True, upload_to='gallery/', verbose_name='Галерея')
    gallery_news = models.ForeignKey(News, related_name='gallery',  on_delete=models.CASCADE, null=True, blank=True, verbose_name='Галерея')

    class Meta:
        verbose_name = 'Галерея новостей'
        verbose_name_plural = 'Галерея новостей'

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





class Photo(models.Model):
    title = models.CharField(max_length=155, verbose_name='Название')
    preview = models.ImageField(upload_to='images', null=True, verbose_name='Превью')
    created = models.DateField(default=timezone.now, verbose_name='Дата мероприятия')

    class Meta:
        verbose_name = 'Фото галерею'
        verbose_name_plural = 'Фото галерея'

    def __str__(self):
        return self.title

class PhotoGallery(models.Model):
    image = models.ImageField(blank=True, null=True, upload_to='images/', verbose_name='Галерея')
    photo_gallery = models.ForeignKey(Photo, related_name='gallery', on_delete=models.CASCADE, null=True, blank=True, verbose_name='Галерея')




    class Meta:
        verbose_name = 'Фото галерею'
        verbose_name_plural = 'Фото галерея'

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

News.title=Photo.title

News.created=Photo.created

News.mainphoto=Photo.mainphoto

Gallery.gallery_news=PhotoGallery.photo_gallery

Мой serializers.py

class GallerySerializer(serializers.ModelSerializer):
    class Meta:
        model = Gallery
        fields = ('__all__')

class PhotoGallerySerializer(serializers.ModelSerializer):
    class Meta:
        model = PhotoGallery
        fields = '__all__'

class NewsSerializer(serializers.ModelSerializer):
    gallery = GallerySerializer(many=True, read_only=True)
    created = serializers.DateField(format='%Y-%m-%-d', input_formats='%Y-%m-%-d')
    mainphoto = ThumbnailSerializer(alias='mainphoto')
    medium = ThumbnailSerializer(alias='medium', source='mainphoto')
    small = ThumbnailSerializer(alias='small', source='mainphoto')
    

    class Meta:
        model = News
        fields = '__all__'

    def create(self, validated_data):
        request = self.context.get('request')
        review = News.objects.create(**validated_data)
        return review

    def to_representation(self, instance):
        representation = super(NewsSerializer, self).to_representation(instance)
        return representation

class PhotoSerializer(serializers.ModelSerializer):
    gallery = PhotoGallerySerializer(many=True, read_only=True)
    created = serializers.DateField(format='%Y-%m-%-d', input_formats='%Y-%m-%-d')

    class Meta:
        model = Photo
        fields = '__all__'
    
    def create(self, validated_data):
        request = self.context.get('request')
        review = Photo.objects.create(**validated_data)
        return review

    def to_representation(self, instance):
        representation = super(PhotoSerializer, self).to_representation(instance)
        return representation

Мой views.py Я использую modelviewsets

class NewsViewSet(viewsets.ModelViewSet):
    queryset = News.objects.all()
    serializer_class = NewsSerializer



    def post(self, request, format=None):

        serializer = NewsSerializer(data=request.data, many=True).data
        if serializer.is_valid():
            mainphoto = self.request.FILES['mainphoto']
            author = request.author
            author.mainphoto = mainphoto
            author.save()

            return Response({'mainphoto' : request.build_absolute_uri(author.mainphoto.url) if author.mainphoto else None}, status=status.HTTP_200_OK)
        else:
            return Response(serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)

class PhotoViewSet(viewsets.ModelViewSet):
    queryset = Photo.objects.all()
    serializer_class = PhotoSerializer

    def post(self, request, format=None):

        serializer = PhotoSerializer(data=request.data)
        if serializer.is_valid():
            mainphoto = self.request.FILES['preview']
            author = request.author
            author.mainphoto = mainphoto
            author.save()

            return Response({'mainphoto' : request.build_absolute_uri(author.mainphoto.url) if author.mainphoto else None}, status=status.HTTP_200_OK)
        else:
            return Response(serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
Вернуться на верх