Home > Mobile >  query that must exclude me from the whole list
query that must exclude me from the whole list

Time:10-16

hi i have a problem with this filter. group_to_add takes some values ​​which should filter out the problem that I don't want those values ​​but I want the others without those. I would like to find a way to take those values ​​and subtract them from others.

group_to_add = DatiGruppi.objects.filter(gruppi_scheda = scheda.id)
GruppiForm.base_fields['dati_gruppo'] = forms.ModelChoiceField(queryset = group_to_add)

I asked a similar question I leave the link select filtering and removal if they are already present in the db

models

class Schede(models.Model):
  nome_scheda = models.CharField(max_length=100)
  utente = models.ForeignKey(User, on_delete = models.CASCADE,related_name = 'utente')

class DatiGruppi(models.Model):
  dati_gruppo = models.ForeignKey(Gruppi,on_delete = models.CASCADE, related_name = 'dati_gruppo')
  gruppi_scheda = models.ForeignKey(Schede,on_delete = models.CASCADE, related_name = 'gruppi_scheda')


class Gruppi(models.Model):
  nome_gruppo = models.CharField(max_length=100)

I have this tab where inside there are saved data groups that contain groups that are inside a select the correct exclusion would be

group_to_add = Gruppi.objects.exclude(dati_gruppo = 147)

but instead of 147 I have to put the id of the data group of that board

view

def creazione(request, nome):
    scheda = get_object_or_404(Schede, nome_scheda = nome)
    eserciziFormSet = formset_factory(EserciziForm, extra = 0)
    
    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
            gruppoName = gruppo_form.cleaned_data['dati_gruppo']
            gruppo.save()

            esercizi_formset = eserciziFormSet(request.POST, prefix='esercizi')
            for esercizi in esercizi_formset:
                esercizi_instance = esercizi.save(commit = False)
                esercizi_instance.gruppo_single = get_object_or_404(DatiGruppi, gruppi_scheda = scheda.id, dati_gruppo = gruppoName)
                esercizi_instance.save()

            return HttpResponseRedirect(request.path_info)

    else:
        group_to_add = Gruppi.objects.exclude(dati_gruppo = 147)

        GruppiForm.base_fields['dati_gruppo'] = forms.ModelChoiceField(queryset = group_to_add)
        gruppo_form = GruppiForm(prefix = 'gruppo')
        esercizi_formset = eserciziFormSet(prefix='esercizi')

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

CodePudding user response:

If I understand it correctly, you should use .exclude(…) [Django-doc] not .filter(…) [Django-doc]:

group_to_add = Gruppi.objects.exclude(
    dati_gruppo__gruppi_scheda=scheda
)
GruppiForm.base_fields['dati_gruppo'] = forms.ModelChoiceField(queryset=group_to_add)
  • Related