Как создать две модели одновременно в django

I am making an API using DRF. Here I have a model called Blog and a model that refers to a Blog called Comment. When I create the Blog, I want to create the comments in the comments field together. Here is the json request and the code.

запрос

{
 comments: [
    {
     ...
    },
    {
     ...
    }
 ]
}

serializers.py

class CommentSerializer(serializers.ModelSerializer):

    class Meta:
        model = Comment
        fields = '__all__'

class BlogSerializer(serializers.Serializer):
    ...
    comments = serializers.ListField(child=serializers.DictField())
    ...
    def create(self, validated_data):
        blog_validated_data = validated_data.copy()
        blog_validated_data.pop('comments')

        qs = Blog.objects.create(**blog_validated_data)

        comments = validated_data.get('comments')
        serializer = CommentSerializer(data=comments, many=True)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        
        return qs

models.py

class Blog(models.Model):
    ...

class Comment(models.Model):
    ...
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    ...

Как я могу решить этот код, используя только queryset?

Вам необходимо создать поле Comment в модели Blog.

Что-то вроде этого:

class Blog(models.Model):
    ...
    comment = models.ForeignKey(
        Comment,
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
    )

Вы можете использовать bulk_create внутри create() для создания всех комментариев в одном ударе по БД.

class BlogSerializer(serializers.Serializer):
    ...
    def create(self, validated_data):
        validated_comments = validated_data.pop('comments')
        blog = Blog.objects.create(**validated_data)

        Comment.objects.bulk_create([
            Comment(**c, blog=blog) for c in validated_comments
        ])
        return blog
Вернуться на верх