添加到数据库后从选择中删除一个元素(过滤)

Posted

技术标签:

【中文标题】添加到数据库后从选择中删除一个元素(过滤)【英文标题】:remove an element from select once added to the db (filtering) 【发布时间】:2021-11-26 16:49:44 【问题描述】:

发布代码和照片,因为我不知道如何解释这个问题。 我有这个绿色按钮,它打开一个模式,允许我创建一个组并在单击添加组后将其保存在数据库中。在数据库中添加对象后,我使用通过模式输入的数据重新加载页面,如果再次单击绿色按钮,我可以添加另一个对象。我总是可以在select中添加相同的对象的问题,我希望一旦添加就不再有可能添加它。

表格

class EserciziForm(forms.ModelForm):
    class Meta:
        model = models.DatiEsercizi
        exclude = ['gruppo_single']
    
class GruppiForm(forms.ModelForm):
    class Meta:
        model = models.DatiGruppi
    exclude = ['gruppi_scheda']

html

% extends "base.html" %
% load widget_tweaks %
% block content %

  <section class="container mt-3">
    <div class="d-flex align-items-center justify-content-between">
      <h1 class="nome-scheda">CREA</h1>
      <a href="% url 'lista-gruppi' %" class="btn btn-outline-primary">LISTA</a>
    </div>
    <hr>
    <div class="scheda mb-4">
      <div class="d-flex justify-content-between align-items-center">
        <h4 style="margin-bottom: 0;">Nome:  scheda.nome_scheda </h4>
        <div>
          <p style="margin-bottom: 0;">
            <span><strong>Inizio:  scheda.data_inizio </strong></span> |
            <span><strong>Fine:  scheda.data_fine </strong></span>
          </p>
        </div>
      </div>
    </div>
    <div class="box">
      % for gruppo in scheda.gruppi_scheda.all %
        <div class="gruppo mb-3">
          <div class="d-flex justify-content-between align-items-center">
            <p style="margin-bottom: 0;"> gruppo.dati_gruppo.nome_gruppo </p>
            <p style="margin-bottom: 0;"> gruppo.giorni_settimana </p>
          </div>
        </div>
      % endfor %

      <div class="text-end">
        <button type="button" class="btn btn-success" data-bs-toggle="modal" data-bs-target="#gruppo">Aggiungi gruppo</button>
      </div>
    </div>
  </section>

  <!-- Modal -->
  <div class="modal fade" id="gruppo" tabindex="-1" aria-labelledby="gruppoLabel" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered modal-xl">
      <div class="modal-content">
        <div class="modal-header">
          <h5 class="modal-title" id="gruppoLabel">Aggiungi gruppo</h5>
          <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
        </div>
        <div class="modal-body">
          <form method="post">
            % csrf_token %
            <div class="gruppo mb-3">
              <div class="d-flex justify-content-between align-items-center">
                  <div class="d-flex align-items-center">
                     gruppo_form.giorni_settimana.label_tag 
                     gruppo_form.giorni_settimana 
                  </div>
                  <div class="d-flex align-items-center">
                     gruppo_form.dati_gruppo.label_tag 
                     gruppo_form.dati_gruppo 
                  </div>
                  
              </div>
            </div>
            <div class="text-end">
              <button type="submit" class="btn btn-success">Aggiungi gruppo</button>
            </div>
          </form>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Chiudi</button>
        </div>
      </div>
    </div>
  </div>
% endblock content %  

查看

def creazione(request, nome):
    scheda = get_object_or_404(Schede, nome_scheda = nome)
    if request.method == "POST":
        gruppo_form = GruppiForm(request.POST, prefix = 'gruppo')
        if gruppo_form.is_valid():
            gruppo = gruppo_form.save(commit = False)
            gruppo.gruppi_scheda = scheda
            gruppo.save()
            return HttpResponseRedirect(request.path_info)
    else:
        gruppo_form = GruppiForm(prefix = 'gruppo')

    context = 'scheda' : scheda, 'gruppo_form' : gruppo_form
    return render(request, 'crea/passo2.html', context) 

【问题讨论】:

【参考方案1】:

我总是可以在选择中添加相同的对象的问题,我希望一旦添加就不再有可能添加它。

如果问题的根源在于没有在模态中再次显示保存的数据,那么您需要确保保存的数据没有从views.py 传递到模板。

更简单的解决方案是修改views.py 中的方法,以便在提交数据时将其从gruppo_form 中取出。这样,它将删除保存的数据,并且不会按要求显示。您还可以检查表单对象以查看该数据是否已存在,请参阅here,如果存在则不要将其返回到模板。

【讨论】:

我怎样才能从表单中删除它们? @riccardotest 你不能为此使用过滤器吗? Django 过滤器,因此您只在选择中过滤掉该值,您可以在外部访问它。 不是很实用,仍然是初学者我需要一个例子,在那个链接上我找不到我的问题的解决方案 @riccardotest this 是 Django 模板中过滤的示例。如果不清楚,我建议为此查找 django 文档。一旦你了解了它们的工作原理,你就可以过滤掉这些值

以上是关于添加到数据库后从选择中删除一个元素(过滤)的主要内容,如果未能解决你的问题,请参考以下文章

一段时间后从表中删除行

文本过滤后从 Android ListView/ArrayAdapter 中删除项目不起作用

将目录添加到 .gitignore 后从远程存储库中删除目录

1 周后从 MySQL 数据库中删除记录

数据表 - 添加单个列选择过滤会删除固定列

添加数据后从先前的最后一行自动填充到新的最后一行?