简体   繁体   English

在 Django 模板的 Bootstrap 4 多选下拉列表中显示多选字段值

[英]Show multiselectfield value in Bootstrap 4 multiselect dropdown in Django template

I am following this answer for the multi-selecting dropdown.我正在关注多选下拉列表的这个答案 I am using django-multiselectfield to collect data in the DB model.我正在使用django-multiselectfield在 DB 模型中收集数据。 I want to show value in bootstrap multi-selecting dropdown but getting the below result我想在 bootstrap 多选下拉列表中显示值,但得到以下结果在此处输入图片说明

I am seeking this result我正在寻求这个结果

在此处输入图片说明

These are my code snippet这些是我的代码片段


model.py模型.py

from django.db import models
from multiselectfield import MultiSelectField

class Country(models.Model):
    name = models.CharField(max_length=40)

    def __str__(self):
        return self.name


class Person(models.Model):
    obj=Country.objects.all()
    TEAM=tuple((ob,ob) for ob in obj) 
    name = models.CharField(max_length=124)
    southasia=MultiSelectField(max_length=200, choices=TEAM)
    
    def __str__(self):
        return self.name

views.py视图.py

from django.http import JsonResponse
from django.shortcuts import render, redirect, get_object_or_404

from .forms import PersonCreationForm
from .models import Person


def person_create_view(request):
    form = PersonCreationForm()
    if request.method == 'POST':
        form = PersonCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('person_add')
    return render(request, 'miracle/index.html', {'form': form})

forms.py表格.py

from django import forms
from .models import Person


class PersonCreationForm(forms.ModelForm):
    class Meta:
        model = Person
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        

template模板

{% load crispy_forms_tags %}
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
    <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
    <title>Dependent Dropdown in Django</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.1/css/bootstrap-select.css" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.bundle.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.1/js/bootstrap-select.min.js"></script>

</head>
<body>
<h2>Person Form</h2>

<form method="post">
     {% csrf_token %}
     {{ form.name|as_crispy_field }}
     <select class="selectpicker" multiple data-live-search="true">
        {{ form.southasia|as_crispy_field }}
    </select>
    <input type="submit" value="Submit">
</form>

<script>
$('select').selectpicker();
</script>

</body>
</html>

How can do show all values in dropdown multiselect instead of normal checkbox select?如何在下拉多选而不是普通复选框选择中显示所有值?

django multiselect will give you check box view. django multiselect 会给你复选框视图。 If you want drop-down multiple list one of the work around is you can create another model for the choices and use manytomany relation .如果您想要下拉多个列表,其中一个解决方法是您可以为选择创建另一个模型并使用 manytomany 关系。 Django rendering should automatically detect it as droplist view and gives you opttion to select multiple choices. Django 渲染应自动将其检测为下拉列表视图,并为您提供选择多个选项的选项。

Like this.像这样。

Class model1(model.models) Choices = models.charfield(choice=choice)类 model1(model.models) Choices = models.charfield(choice=choice)

Class person(models.model) Choice = manytomany (model1).类 person(models.model) Choice = manytomany (model1)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM