django rest framework:表示如何传递选择选项

时间:2017-11-25 09:07:35

标签: django django-rest-framework

我正在尝试在reactjs中创建一个表单作为前端,它将使用Django api创建一个对象

我正在尝试制作一种成分

以下是用于创建或更新的序列化程序和成分

class IngredientCreateUpdateSerializer(ModelSerializer):
    class Meta:
        model = Ingredient
        fields = [
            'name',
            'munit',
            'rate',
            'typeofingredient',
        ]

我将把munit和typeofingredient作为选择字段。

必须从服务器提供这些选择字段的选项。

例如:munit可以选择kg,ltr,pcs等 和typeofingredient可以选择蔬菜,香料,水果等

两者都是ForeignKey类型。

因此,在使用create api之前,我必须在服务器的特定实例中为表单提供munit和typeofingredient的选项。

那么怎么做呢。为了获得选项,我应该创建另一个api。还是有任何直接的方式

1 个答案:

答案 0 :(得分:0)

如果typeofingredient和munit都是外键,那么您可以为每个模型定义序列化器,并使用list api填充选择选项。

如果你想在一个api中组合两个序列化程序,你可以在ViewSet中做同样的事情。

views.py

#Assuming MunitOptionsSerializer and TypeOfIngredientOptionsSerializer are 
#your serializers
class IngredientOptionsViewSet(viewsets.ViewSet):
    permission_classes = [IsAuthenticated]

    def list(self, request):
        # assuming MunitOptions & TypeOfIngredientOptions are the models
        qs = MunitOptions.objects.all()
        s1 = MunitOptionsSerializer(qs, many=True)
        qs = TypeOfIngredientOptions.objects.all()
        s2 = TypeOfIngredientOptionsSerializer(qs, many=True)
        return Response({'munit':s1.data, 'typeofingredient':s2.data})

在你的app urls.py

options_list = OptionsViewSet.as_view({
    'get': 'list',
})
router = routers.DefaultRouter()
urlpatterns = patterns(
    url(r'^', include(router.urls)),
    url(r'^options/$', options_list, name='options-list'),
)

也可以只读#39; ViewSet的限制是通过从ReadOnlyModelViewSet而不是ModelViewSet继承它们,因为您将仅将这些序列化程序用于列表/检索功能。