【发布时间】:2021-08-07 22:15:25
【问题描述】:
我在 django-rest-framework 中有一个端点并接收一个对象 name 和 date。
在保存我的数据库之前,我需要在对象中包含 user (fk_model_user),如何保存或更新在正文请求中包含新项目?
- 视图集:
class MusicStylesViewSet(
mixins.ListModelMixin,
mixins.CreateModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.RetrieveModelMixin,
viewsets.GenericViewSet
):
permission_classes = [permissions.AllowAny]
queryset = MusicStyleModel.objects.all()
serializer_class = StyleSerializer
- 序列化器:
class StyleSerializer(ModelSerializer):
class Meta:
model = MusicStyleModel
fields = ('id', 'name', 'date', 'user')
- 型号:
class MusicStyleModel(models.Model):
id = models.UUIDField(primary_key=True, unique=True, default=uuid.uuid4, editable=False, null=False)
name = models.CharField(max_length=150, null=False, blank=False)
date = models.DateTimeField(null=False, blank=False)
user = models.ForeignKey(
CustomUser,
null=True,
blank=False,
on_delete=models.CASCADE
)
示例 - 发布请求:
{
"name": "test",
"date": "2021-05-14T15:47:06.794639-03:00"
}
示例 - 回复:
{
"id": "810ae929-2f6d-411a-8d10-77c8f613a8ac",
"name": "test",
"date": "2021-05-14T15:47:06.794639-03:00",
"user": "c6fbbfee-2f16-49f3-b4cd-b99e05a66ea8"
}
"id": "810ae929-2f6d-411a-8d10-77c8f613a8ac",在模型中自动生成
"user": "c6fbbfee-2f16-49f3-b4cd-b99e05a66ea8" 截取用户id请求,并保存
【问题讨论】:
-
您可以在您的序列化程序中覆盖 create 方法或在您的视图集中 (APIView) 中的 post 方法。根据您希望用户成为什么。
-
@ItsMilann 这样做的最佳做法是什么?
-
我看不出有什么区别,除了序列化程序无法直接访问请求对象,所以我建议在 apiview 中创建它
-
@ItsMilann 要创建 ApiView,我需要修改我当前的 apiview 吗?你能演示我如何在 'apiview' 和 'serializer' 中做到这一点吗?
标签: python django model-view-controller django-rest-framework