我有一个简单的模型:
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
并让下拉菜单消失?
答案 0 :(得分:1)
可以在serializer类的Meta选项中设置read_only_fields
class StoreSerializer(serializers.ModelSerializer):
class Meta:
model = Store
fields = ["open", "user"]
read_only_fields = ("user",)
请注意,这只会从 HTML 表单中排除/隐藏 user
,不会进行预设。