我在项目中使用django rest框架。你知道吗
我有一个gallery
模型,它有一个user
字段。此字段是创建库的用户的外键。以及name
字段,它是库的名称。你知道吗
class Gallery(models.Model):
user = models.ForeignKey(User,related_name='galleries')
name = models.CharField(max_length=64)
这是我的序列化程序:
class GallerySerializer(serializers.ModelSerializer):
user = serializers.ReadOnlyField(source='user.username')
def validate_name(self, name):
if len(name) < 3:
raise serializers.ValidationError("name must at least 3 letters")
return name
class Meta:
model = Gallery
fields = ('id', 'user', 'name',)
def create(self, validated_data):
"""
Create and return a new `Gallery` instance, given the validated data.
"""
return Galleries.objects.create(**validated_data)
这是我的views
:
class GalleryList(generics.ListCreateAPIView):
queryset = Gallery.objects.all()
serializer_class = GallerySerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly,)
def perform_create(self, serializer):
serializer.save(user=self.request.user, )
class GalleryDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Gallery.objects.all()
serializer_class = GallerySerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly,)
我想验证post(和put)数据,并阻止用户创建两个同名库。(如果“用户A”有一个“库A”,则他无法创建同名库或将另一个库重命名为“库A”)。但是“用户B”可以创建一个“gallery a”)
为此,我需要检查user.galleries.filter(name=name)
是否存在。你知道吗
但我不知道如何在序列化程序中获取user
。你知道吗
您可以从传递给序列化程序的上下文中获得它。这是为您自动完成的,因此您可以这样访问它:
如果希望能够指定其他用户,可以自己将其添加到上下文中:
这将使用户可以作为
self.context['user']
使用。这有点冗长,但它更通用,因为它允许序列化程序被传递给不同于请求者的用户。你知道吗相关问题 更多 >
编程相关推荐