Представление DRF / POST для двух таблиц, связанных внешними ключами
Как написать представление POST для двух таблиц, сопоставленных по foreignkey?
вот мои модели...
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE,null=True, blank=True,
editable=False)
title = models.CharField(max_length=255, null=False)
description = models.TextField(null=True, blank=True)
created_date = models.DateTimeField(auto_now=True)
enable = models.BooleanField(default=True)
class PostImages(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
images = models.ImageField(null=True, blank=True)
serializer:
class UserPostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ['author','title','description']
Я сделал представление, но оно ничего не делает с таблицей PostImages... Я хочу, чтобы она создавала пост с изображениями...
@api_view(['POST'])
@permission_classes([IsAuthenticated])
def PostUpload(request):
data = request.data
user = request.user
if request.method == 'POST':
serializer = UserPostSerializer(data=data, many=False)
if serializer.is_valid():
serializer.save(author=user)
return Response(serializer.data)
return Response(serializer.errors)
Я думаю, что это должно работать
class PostImagesSerializer(serializers.ModelSerializer):
class Meta:
model = PostImages
fields = ['images']
class UserPostSerializer(WritableNestedModelSerializer):
post_set = PostImagesSerializer()
class Meta:
model = Post
fields = ['author','title','description', 'post_set']
- Суффикс _set позволяет вам ссылаться на FK (или вы можете просто добавить 'related_name' к FK)
- Избегайте имен переменных типа "post", "get" и т.д.
- Вы можете использовать breakpoint() или shell и использовать
dir()
для просмотра методов, доступных для вашей модели (там должно бытьpost_set
илиpostimages_set
я не помню) - Теперь вы можете ссылаться в представлении на PostImages .
- Читать о https://github.com/beda-software/drf-writable-nested