【问题标题】:Django ModelSelect2MultipleWidget for ManyToMany field多对多字段的 Django ModelSelect2MultipleWidget
【发布时间】:2020-10-28 16:00:13
【问题描述】:

我在我的模型中定义了一个使用一篇或多篇文章的服务。因此,我使用多对多关系。这是我的模型.py

class Artikel(models.Model):
    id = models.AutoField(unique=True, primary_key=True)
    artikel_typ = models.IntegerField(unique=False, default=0)
    bezeichnung = models.TextField(max_length=50)
    menge = models.FloatField(blank=True, null=True)
    preis = models.FloatField(blank=True, null=True)
    einheit = models.TextField(blank=True, null=True)

    def __str__(self):
        return self.bezeichnung

class Leistung(models.Model):
    id = models.TextField(unique=True,primary_key=True)
    bezeichnung = models.TextField()
    dauer = models.FloatField(blank=True, null=True)  # This field type is a guess.
    preis = models.FloatField()  # This field type is a guess.
    artikel = models.ManyToManyField(Artikel,null=True, unique=False)

    def __str__(self):
        return self.bezeichnung
    class Meta:
        db_table = 'leistung'

我定义了添加新服务的表单,如下所示:

class AddNewServiceForm(forms.ModelForm):

class Meta:
    artikel_dd = Artikel.objects.all()

    model = Leistung
    fields = '__all__'
    widgets = {'id':forms.TextInput(attrs={'id': 'id', 'name': 'id', 'type': 'text', 'class': 'form-control',
               'data-val-required': 'Bitte tragen Sie eine 4MyHealth ID ein!', 'aria-required': 'true',
               'aria-invalid': 'false', }),
        'bezeichnung': forms.TextInput(
        attrs={'id': 'bezeichnung', 'name': 'bezeichnung', 'type': 'text', 'class': 'form-control',
               'data-val-required': 'Bitte tragen Sie eine Bezeichnung ein!', 'aria-required': 'true',
               'aria-invalid': 'false', }),
        'dauer': forms.TextInput(
            attrs={'id': 'dauer', 'name': 'dauer', 'type': 'number', 'step': '0.01', 'class': 'form-control',
                   'data-val-required': 'Bitte tragen Sie die Dauer ein!', 'aria-required': 'true',
                   'aria-invalid': 'false', }),
        'preis': forms.TextInput(
            attrs={'id': 'preis', 'name': 'preis', 'type': 'number', 'step': '0.01', 'class': 'form-control',
                   'data-val-required': 'Bitte tragen Sie die Dauer ein!', 'aria-required': 'true',
                   'aria-invalid': 'false', }),
        'artikel': ModelSelect2MultipleWidget(queryset=Artikel.objects.all(),attrs={'id': 'artikel', 'name': 'artikel_dropdown',
                                                            'aria-required': 'false',
                                                            'aria-invalid': 'false', }),

    }

模板看起来像下面的 sn-p(我不会全部发布,因为它很多):

        {% load static %}
    <!DOCTYPE html>
    <html lang="en">
    
    {% block javascript %}
        <script type="text/javascript">
    
    
        </script>
    {% endblock %}
    {% block jquery %}
        <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
        <script type="text/javascript">
    
        </script>
        <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    {% endblock %}
    
    <script src="{% static 'django_select2/django_select2.js' %}"></script>
    
    <link href="/static/website/js/select2.min.js" rel="stylesheet" />
    <script src="/static/website/js/select2.min.js"></script>
    <head>
        {% include 'head.html' %}
    
        <!--Leistungen -->
        {% load static %}
    
    <body class="animsition">
    
    <div class="page-wrapper">
    
    
        {% include 'sidebar.html' %}
    
        <!-- PAGE CONTAINER-->
        <div class="page-container">
...
            <div class="row form-group">

              <label class="label mb-1">Verfügbare Artikel:</label>
                {{ forms.artikel }}
              </div>
....

所以当我添加 {{ forms.artikel }} 时,该字段出现,但里面没有数据。当我在该字段中输入内容时,我在控制台中收到错误:加载资源失败:服务器响应状态为 404(未找到)。

我错过了什么?/我做错了什么?我怎么能解决这个问题?提前致谢!

【问题讨论】:

    标签: django widget jquery-select2 multipleselection


    【解决方案1】:

    所以经过一番挣扎和大量“尝试一切,直到它起作用”后,我明白了!我做了两件事并且它们有效:

    1. 使用 Select2.js:在你的 venv 中使用 pip 安装它
    2. 在定义小部件时:使用 Select2MultipleWidget(强调小部件!!!)它工作正常!

    如果有人在这方面需要帮助,我们很高兴为他们提供帮助! ???

    【讨论】:

      猜你喜欢
      • 2013-04-27
      • 2011-02-05
      • 2014-06-28
      • 2017-08-13
      • 2011-01-14
      • 2021-11-20
      • 2016-02-23
      • 2016-03-21
      相关资源
      最近更新 更多