我正在尝试在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。还是有任何直接的方式
答案 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继承它们,因为您将仅将这些序列化程序用于列表/检索功能。