django – 无法使用视图名称“itemimages-detail”解析超链接关
我曾经有一个图片字段,我想将其更改为多个图片字段:
我有 picture = models.ImageField(null=True,blank=True,upload_to="items") 所以我创建了一个新模型: class ItemImages(models.Model): itemImage = models.ForeignKey(Item,related_name='pictures') image = models.ImageField(null=True,upload_to="items") 之后,我创建了视图集:(请注意,我不知道我在做什么) class ItemImagesViewSet(viewsets.GenericViewSet): for_model = Item queryset = Item.objects.all() serializer_class = ItemImagesSerializer permission_classes = (permissions.IsAuthenticated,IsOwnerOrReadOnly) 然后网址转: router = ExtendedSimpleRouter() ... ( router.register(r'items',ItemViewSet) .register(r'itemimages',ItemImagesViewSet,'items-images',parents_query_lookups=['items']) # I added this line .register(r'reviews',ItemReviewViewSet,'items-review',parents_query_lookups=['content_id']) ) 我的序列化器: from rest_framework import serializers from django.utils.translation import ugettext_lazy as _ from inventory.models import Item,ItemImages from users.api.serializers import ObjectReviewsSerializer class ItemSerializer(ObjectReviewsSerializer): class Meta: model = Item fields = ( 'category','id','pictures','created','title','url','value','user','reviews_url','rating','description' ) read_only_fields = ('user','modified','') def create(self,validated_data): validated_data.update({ 'user': self.context['request'].user,}) return super(ItemSerializer,self).create(validated_data) def validate(self,attrs): more_fee = attrs.get('more_fee',None) less_fee = attrs.get('less_fee',None) if not more_fee and not less_time_fee and not self.instance: msg = _('You should provide either a more fee or a less fee') raise serializers.ValidationError(msg) return attrs class ItemImagesSerializer(ObjectReviewsSerializer): class Meta: model = ItemImages 它在我请求/ items / 23时给出了标题中声明的错误 完整的错误消息:
解决方法
您使用“items-images”作为URLS的基本名称而不是默认的queryset属性名称注册“itemimages”,这意味着名称为“itemimages-detail”的网址不再存在,而您的视图集的详细网址将为“ items-images-detail“(见
Usage section of the DRF docs).
由于您也没有为序列化程序指定“图片”字段的字段,因此它将尝试使用默认的ViewLink =“itemimages-detail”的默认HyperLinkRelatedField序列化程序.在ItemSerializer中,您需要为具有正确的非默认view_name的图片指定字段: pictures = serializers.HyperLinkRelatedField( many=True,read_only=True,view_name='items-images-detail',) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |