如何解决Django DRF - 在 api webview 中“隐藏用户”必填字段
class Store(models.Model):
name = models.CharField("address",max_length = 128,null = True,blank = True)
open = models.PositiveIntegerField("status",default = 1,choices = [(0,0),(1,1)])
user = models.OnetoOneField(User,on_delete = models.CASCADE,)
使用简单的序列化程序:
class StoreSerializer(serializers.ModelSerializer):
class Meta:
model = Store
fields = ["open","user"]
视图:
class StateViewSet(viewsets.ModelViewSet):
serializer_class = StoreSerializer
http_method_names = ['get','put','head']
authentication_classes = [SessionAuthentication,]
permission_classes = [IsAuthenticated,]
def list(self,request):
usr = request.user
stores = Store.objects.filter(user = usr)
return Response(stores.values_list("name",flat = True))
def put(self,request):
usr = request.user
Store.objects.filter(user = usr).update(state = request.data["state"])
return Response("updated")
我想要的是,去掉 user 字段——无论如何只有当前用户可以改变状态,所以它已经是一个预设值。我知道我省略了名称,因为它是 null = True,blank = True
,但是我如何将 user
预设为 request.user
并让下拉菜单消失?
解决方法
可以在serializer类的Meta选项中设置read_only_fields
class StoreSerializer(serializers.ModelSerializer):
class Meta:
model = Store
fields = ["open","user"]
read_only_fields = ("user",)
请注意,这只会从 HTML 表单中排除/隐藏 user
,不会进行预设。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。