Как создать две модели одновременно в 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