Сохраните некоторые поля из одной модели в другую. Когда я создаю новость, я хочу, чтобы поля 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)