加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

django – 无法使用视图名称“itemimages-detail”解析超链接关

发布时间:2020-12-20 13:49:28 所属栏目:Python 来源:网络整理
导读:我曾经有一个图片字段,我想将其更改为多个图片字段: 我有 picture = models.ImageField(null=True,blank=True,upload_to="items") 所以我创建了一个新模型: class ItemImages(models.Model): itemImage = models.ForeignKey(Item,related_name='pictures')
我曾经有一个图片字段,我想将其更改为多个图片字段:
我有

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时给出了标题中声明的错误
我知道我做错了很多但是我不知道为什么和为什么.
我是Django Rest和Django的新手,我正在玩一个现有的项目(尝试将一张图片更改为多张)

完整的错误消息:

ImproperlyConfigured at /api/v1/items/23/ Could not resolve URL for
hyperlinked relationship using view name “itemimages-detail”. You may
have failed to include the related model in your API,or incorrectly
configured the lookup_field attribute on this field.

解决方法

您使用“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',)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读