Mes modèles:accès Ajax django ManyToManyField par id
class Topping(models.Model):
name=models.CharField(max_length=24)
class Pizza(models.Model):
toppings=models.ManyToManyField(Topping)
Mes vues:
def get_pizza(request):
if request.is_ajax():
pizza_list=[]
pizza_list=Pizza.objects.all()
pizza_list_json = serializers.serialize('json', pizza_list)
return JsonResponse({'result': 'OK', 'data': {
'pizza_list': pizza_list_json,
}})
Mon Javascript:
function get_pizza() {
$.ajax({type: 'POST',
url: '/path/get_pizza/',
data: {
},
success: function (lista) {
if (lista.result === 'OK') {
var pizza_list_json=lista.data.pizza_list;
pizza_list = JSON.parse(pizza_list_json);
make_pizza(pizza_list);
};
}
});
};
function make_pizza() {
for (i=i; i<pizza_list.length; i++) {
var myfield=toppings;
var list_elem=pizza_list[i].fields[myfield];
};
};
Le problème est que list_elem=[1, 4]
contient l'identifiant des objets alors que j'ai besoin des noms list_elem=[tomato, peperoni]
. Avec une clé étrangère, je peux utiliser l'option to_field=name
dans le modèle, mais avec un ManyToManyField
je ne peux pas. J'ai essayé myfield__name
mais ne fonctionne pas (il donne erreur myfield__name is not defined
). Alors, que puis-je faire? Je dois définir le pizza_list
d'une manière différente à mon avis? Quel est un moyen efficace de gérer cela?
Merci
Il n'y a pas un moyen plus efficace? parce que pizza_list est très longue (des milliers d'éléments) ce qui signifie quelques milliers de demandes – fabio
Je ne pense pas. Peut-être que vous pouvez le faire à partir de Python, par exemple. quelque chose comme 'get_display_name()', mais pas de JavaScript, car il n'a pas accès à la relation. – MiniGunnR