【问题标题】:How to POST data from a multiple select box in Django Rest Framework如何从 Django Rest Framework 中的多个选择框中发布数据
【发布时间】:2018-06-23 18:15:55
【问题描述】:

我正在尝试使用 AJAX 向 DRF 发出 POST 请求。

我的一个字段是一个多选框。我似乎找不到使请求正常工作的方法。

<select class="full-width" data-init-plugin="select2" id='roles' name="roles" multiple>
    {% for role in roles %}
        <option value="{{role.id}}">{{role.name}}</option>
    {% endfor %}
</select>

我已尝试发布如下所示的整个选择框。

var roles = $('#roles').val();

我也尝试过发布一组值。

var roles = $('#roles').find('option:selected').map(function(){return $(this).val()}).get();

我的 AJAX 调用如下所示:

$.ajax({
  method: "POST",
  url: "/v1.0/relationships/" + url,
  data: {roles: roles}
)

我的 API 视图如下所示:

class RelationshipSingle(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView):
    """
        /relationship/{id}

        Method  Action
        GET     Return details of relationship with ID {id}.
        POST    Invalid option.
        PATCH   Edit the relationship.
        DELETE  Delete the relationship.
    """

    queryset = Relationship.objects.all()
    serializer_class = RelationshipSerializer

    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

    def patch(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)

我的序列化器如下所示:

class RelationshipSerializer(serializers.ModelSerializer):

    class Meta:
        model = Relationship
        fields = '__all__'

【问题讨论】:

标签: jquery python ajax django django-rest-framework


【解决方案1】:

我假设多个选择框中的值与您的模型有很多关系。在 Django-rest 中,如果您正在创建多个对象,您将发送对象列表。在您的情况下,您的 Post 数据应如下所示

{
    role: [
        {"name": "ABC"},
        {"name": "CDF"}
    ]
}

$('select').val() 返回值列表。您需要将其转换为对象列表。可以这样完成。

var selected_vals = $('#roles').val();

selected_vals = selected_vals.map(x => {
    return({name: x});
});
console.log(selected_vals)

【讨论】:

    猜你喜欢
    • 2019-12-29
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 2017-06-03
    • 2019-02-22
    • 1970-01-01
    相关资源
    最近更新 更多