Представление 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']
  1. Суффикс _set позволяет вам ссылаться на FK (или вы можете просто добавить 'related_name' к FK)
  2. Избегайте имен переменных типа "post", "get" и т.д.
  3. Вы можете использовать breakpoint() или shell и использовать dir() для просмотра методов, доступных для вашей модели (там должно быть post_set или postimages_set я не помню)
  4. Теперь вы можете ссылаться в представлении на PostImages
  5. .
  6. Читать о https://github.com/beda-software/drf-writable-nested
Вернуться на верх