Ajax доступ по django ManyToManyField по id
Мои модели:
class Topping(models.Model):
name=models.CharField(max_length=24)
class Pizza(models.Model):
toppings=models.ManyToManyField(Topping)
Мои взгляды:
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,
}})
Мой 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];
};
};
Проблема в том, что list_elem=[1, 4]
содержит идентификатор объектов, а мне нужны имена list_elem=[tomato, peperoni]
, С внешним ключом я могу использовать to_field=name
вариант в модели, но с ManyToManyField
Я не могу Я старался myfield__name
но не работает (это дает myfield__name is not defined
ошибка). Так что я могу сделать? Я должен определить pizza_list
по-другому, на мой взгляд? Какой эффективный способ справиться с этим?
Спасибо
1 ответ
- Создайте новый вид, который принимает
id
в качестве параметра и возвращает имя в формате JSON, например{"name": "Jalapeno"}
, - Создайте функцию, которая отправляет запрос на URL-адрес, связанный с созданным вами представлением, и записывает
name
переменная из ответа JSON. - Показать значение, где вы хотите, например,
displayElemName(elem_id)
,
Выше приведена общая идея, которую вы можете использовать для решения вашей проблемы. Тем не менее, это будет запрашивать базу данных столько раз, сколько элементов в вашем списке. Если вы согласны с этим, то это будет работать нормально.