【问题标题】:Django HyperlinkedRelatedField read_only False gives queryset ErrorDjango HyperlinkedRelatedField read_only False 给出查询集错误
【发布时间】:2019-01-16 21:32:49
【问题描述】:

狗模型有一个字段“猫”

class Dog(models.Model):
    ...
    cat = models.ForeignKey(Cat)
    ...

class CatSerializer(serializers.HyperlinkedModelSerializer):      
    class Meta:
        model = Cat
        # Replace ID with SLUG in urls
        lookup_field = 'slug'
        fields = ('url', 'slug')
        extra_kwargs = {
            'url': {'lookup_field': 'slug'}
        }

class DogSerializer(serializers.HyperlinkedModelSerializer):
    cat= serializers.HyperlinkedRelatedField(
        view_name='cat-detail',
        lookup_field='slug',
        many=False,
        read_only=True
    )
    class Meta:
        model = Dog
        fields = ('url', 'slug', 'cat')
        lookup_field = 'slug'
        extra_kwargs = {
           'url': {'lookup_field': 'slug'}
        }

class CatViewSet(viewsets.ModelViewSet):
    def get_serializer_context(self):
        context = super().get_serializer_context()
        context['slug'] = self.kwargs.get('slug')
        return context
    queryset = Cat.objects.all()
    serializer_class = CatSerializer
    lookup_field = 'slug'

class DogViewSet(viewsets.ModelViewSet):
    queryset = Dog.objects.all()
    lookup_field = 'slug'
    serializer_class = DogSerializer

router = routers.DefaultRouter()
router.register(r'cats', rest_views.CatViewSet)
router.register(r'dogs', rest_views.DogViewSet)

如何设置:

read_only=False

我将它设置为 False 时得到的错误是:

'关系字段必须提供queryset参数,' AssertionError:关系字段必须提供queryset 参数,覆盖get_queryset,或设置read_only=True

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:
    cat= serializers.HyperlinkedRelatedField(
        view_name='cat-detail',
        lookup_field='slug',
        many=False,
        read_only=False,
        queryset=Cat.objects.all()
    )
    

    这工作得很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      • 2021-10-30
      • 2020-08-14
      • 2012-07-15
      • 1970-01-01
      • 2014-11-19
      相关资源
      最近更新 更多