首页 > 解决方案 > Django REST 未正确呈现表单

问题描述

我有以下代码,它应该呈现一个 FooBars 列表。我有两个问题:第一个是,当我取消对 state、foo 和 bar 对象的注释时,列表会使用数据库中的实际数据(它们是选择字段)呈现它们,但是当我让它们评论时,它只显示选择整数。

第二个问题是,当我然后导航到rest/foo/1/?html_form=trueHTML 表单并查看 HTML 表单时,如果我留下注释,它只会呈现state,foo和字段。bar我想让它们不加注释,以便用户可以查看实际数据,但这会使我或用户无法编辑这些字段。

我究竟做错了什么?

休息.py

class FooBarSerializer(serializers.ModelSerializer):
    id = serializers.IntegerField(required=False)
    #state = serializers.SerializerMethodField(label=_('State'))
    #foo = serializers.SerializerMethodField(label=_('Foo'))
    #bar = serializers.SerializerMethodField(label=_('Bar'))

    def get_state(self, obj):
        return obj.get_state_display()

    def get_foo(self, obj):
        return obj.get_foo_display()

    def get_bar(self, obj):
        return obj.get_bar_display()

    class Meta:
        model = FooBar
        fields = ('id', 'state', 'foo', 'bar', 'bool1', 'bool2', 'bool3')

class FooBarViewSet(viewsets.ModelViewSet):
    serializer_class = FooBarSerializer
    permission_classes = (IsAuthenticated, IsAdminUser)
    queryset = FooBar.objects.all()

    def render_form(self, request, serializer, status):
        from django.shortcuts import render
        return render(request, 'foo/foobar_item.html', {
            'intent_form': serializer,
            'intent_style': {},
        }, status=status)

router.register(r'rest/foo', FooBarViewSet, 'foobaritem')

标签: djangodjango-rest-framework

解决方案


这个问题可以参考我另一个问题的答案。而不是intent_style在 HTML 文件中,我写的是bar_stlye,所以它不能正常工作。


推荐阅读