Возвращать более 1 объекта с AJAX в Джанго

У меня есть вызов AJAX, который возвращает более 1 объекта, и это способствует тому, чтобы мне дала неудача, но я нуждаюсь во всех объектах, которые мне возвращает query, и не нахожу способ перемещать все к сдержись. Как предполагается, что Вы были бы должны перемещать это? Я попытался происходить с JSON, но не знаю, как и пробы, которые я взял, я не функционировали. Кто-то может бросать свет на этом деле?

def getPhotos(request):
    code = request.POST.get('code', '')
    fotos = Photo.objects.filter(photoCode=code)

return fotos

Я обновляю:

Использовав .filter () меня достает следующая ошибка: too many оцени to unpack

0
задан 19.10.2016, 15:04
3 ответа

Поскольку они это прокомментировали ранее, нужно использовать filter, так как это метод, который позволяет получать более одного object в результате одного queryset. Однако, когда возвращаются объекты JSON, не всегда возможно последовательно преобразовывать весь объект.

Смоги реализовывать следующее:

def fotos_json(request):
    lista_fotos_json = []
    code = request.GET.get('code', '') # Esto se cambia GET ya que por orden la solicitud debe ser GET
    fotos =  Fotos.objects.filter(photoCode=code)
    # recorre las fotos y las almacena en la lista de fotos json
    for foto in fotos:
        objeto_foto = {}
        objeto_foto["id"] = foto.id
        # Se deberia asignar al dictionary todos los atributos que desee enviar en el json.
        lista_fotos_json.append(objeto_foto)
    # Por ultimo retorna el objeto json
    return HttpResponse(json.dumps({'status':1,
                                        "data":lista_fotos_json}))


    #finalmente desde su plantilla html deberia llamar este metodo de esta manera
     $.ajax({
        "type" : "GET",
        "data": {"code": 555},
        "url" : "{% url 'nombre url para acceder al view' %}",
        "beforeSend" : function(xhr, settings){
            $.ajaxSettings.beforeSend(xhr, settings);
        },
        "success" : function( data ){
    });
2
ответ дан 24.11.2019, 13:03

Метод get() из-за определения возврати один и только объект или None (что ты можешь менять на Ошибку 404), в случае когда не находит совпадения.

То, в чем ты нуждаешься, состоит в том, чтобы использовать метод filter() который позволяет тебе получать queryset с одним или большим количеством объектов, которые совпадали бы с твоей консультацией. Эта Ваша ссылка: https://docs.djangoproject.com/es/1.10/topics/db/queries/#retrieving-specific-objects-w.

Твой код смог бы поверните таким образом:

def getPhotos(request):
    code = request.POST.get('code', '')
    fotos = Photo.objects.filter(photoCode=code)

return fotos

Ясно, что твой вопрос не связан с этикеткой AJAX, а следовательно ты был бы должен считать возможность удалять ее.

1
ответ дан 24.11.2019, 13:03

Если он для ajax, ты можешь использовать serializadores django, чтобы возвращать результаты в JSON

Таким образом для Джанго 1.7 +

from django.core import serializers
from django.http import JsonResponse

def getPhotos(request):
    code = request.POST.get('code', '')
    fotos = Photo.objects.filter(photoCode=code)
    resultado = serializers.serialize('json', fotos)
    return JsonResponse({'fotos': resultado}, safe=False)
0
ответ дан 24.11.2019, 13:03