Выпадающий список в django
📁 список, python, вопрос, django
Пишу простенький интернет-магазин на Django 1.9. Имеются следующие модели:
tovar/models.py
class Color(models.Model): color = models.CharField(verbose_name=""Цвет"", max_length=25, blank=False, null=True) code = models.CharField(verbose_name=""Код цвета"", max_length=8, blank=True, null=True)class Tovar(models.Model): color = models.ManyToManyField(Color, blank=True)cart/models.py
class Cart(models.Model): color = models.CharField(verbose_name=""Цвет"", max_length=25, blank=False, null=True)В таблице Cart приложения cart указан список цветов определённого товара которые должны браться из таблицы Tovar (поля ManyToManyField).
От сюда вопрос: как мне написать соответствующую форму поля color модели Tovar? Если использовать виджет SelectMultiple то как реализовать вывод ManyToManyField?
Можно в шаблоне с помощью цикла в тегах <select><option> разместить нужную информацию из полей, а затем подключить для красивого мультиселекта.
<select class=""yourclass"" multiple="""" name=""youame"" required="""" id=""yourselectid""> {% for m in model_context %} <option value=""{{ m.somevalue }}"">{{ m.somename }}</option> {% endfor %}</select>В вашем кастомном .js файле можно манипулировать этой штукой, обращаясь к параметру id тега <select>.
$(document).ready(function(){ $('#yourselectid').multiselect({ columns: 1, placeholder: 'Какая-то надписька для поля', search: false, selectAll: true });});Передавать инфу из этой штуки можно по нажатию на кнопку, её надо в HTML создать.
$(document).ready(function() { $(""#send-button"").click(function() { var fdata = $(""#yourForm"").serialize(); $.ajax({ url: ""ajax_calls/your_path/"", type: ""POST"", dataType: ""json"", data: fdata, success : function(json) { alert(""Successfully sent the URL to Django""); }, error : function(xhr,errmsg,err) { alert(""Could not send URL to Django. Error: "" + xhr.status + "": "" + xhr.responseText); } }); });});Да, при такой сх��ме можно не создавать форму вообще. Вся магия происходит в views.py и custom.js.
Войдите чтобы оставить ответ