有两个实体(Club和User),以及它们的表现表(ClubUser)。
现在,当我们为POST / clubs创建一个俱乐部时,我们想要创建多个ClubUsers。什么是有害生物做法?
我可以找到这三种解决方案。
请求网址:/clubs
请求方法:POST
请求正文:
{
name: 'club name',
users: [
{
id: 1
},
{
id: 2
}
]
}
Request1网址:/clubs
Request1方法:POST
Request1正文:
{
name: 'club name'
}
Request2网址:/clubs/1/users
Request2方法:POST
Request2正文:
[
{
user_id: 1
},
{
user_id: 2
}
]
Request1网址:/clubs
Request1方法:POST
Request1正文:
{
name: 'club name'
}
Request2网址:/clubs/1/users/1
Request2方法:POST
Request3网址:/clubs/1/users/2
Request3方法:POST
第三个看起来不错,但是它多次请求。
此问题的最佳实践是什么?
答案 0 :(得分:0)
尝试一下:
模型
from django.db.models import (
Model, ManyToManyField
)
class User(Model):
club = ManyToManyField(Club)
序列化器
from rest_framework.serializers import (
ModelSerializer, IntegerField, RelatedField
)
class ClubRelatedField(RelatedField):
def to_representation(self, obj):
data = {
'id': obj.id,
'name': obj.name
}
return data
def to_internal_value(self, id):
return Club.objects.get(id=id)
class UserSerializer(ModelSerializer):
id = IntegerField(read_only=True)
club = ClubRelatedField(
queryset=Club.objects.all(), many=True, required=True
)