"MultipleObjectsReturned" из БД по шаблону - PullRequest
2 голосов
/ 26 февраля 2020

Обновлено:

с "item15 = Anhang.objects.filter (KN = item.KN)" я получаю Ошибка: Тип исключения: исключение AttributeError Значение:
У объекта 'QuerySet' нет атрибута '_meta'

views.py

@login_required()
def anhang_view(request, id=None):
    contextoo = {}
    item = Kunden.objects.get(id=id)
    kontaktform_form = KontaktForm(request.POST or None, instance=item)
    creatorform_form = CreateANform()
    contextoo['creatorform_form'] = creatorform_form
    if Kunden.objects.filter(KN=item.KN).exists():
        item14 = Kunden.objects.get(KN=item.KN)
        editkontakto_form = InfoKontaktoForm(request.POST or None, instance=item14)
        contextoo['editkontakto_form'] = editkontakto_form
    if Anhang.objects.filter(KN=item.KN).exists():
        item15 = Anhang.objects.filter(KN=item.KN)
        ANform_form = ANform(request.POST or None, instance=item15)
        contextoo['ANform_form'] = ANform_form
    if request.method == 'POST':
        creatorform_form = CreateANform(request.POST)
        if creatorform_form.is_valid():
            cre = creatorform_form.save(commit=True)
            cre.save()
        return redirect('/Verwaltung/KontaktAnlegen')
    else:
        return render(request, 'blog/anhang.html', contextoo)

ОШИБКА:

У объекта 'QuerySet' нет Атрибут «_meta» Метод запроса: GET URL запроса: http://127.0.0.1: 8000 / Verwaltung / Anhang / 10 Django Версия: 3.0.1 Тип исключения: AttributeError Значение исключения: объект 'QuerySet' не имеет атрибута _meta

anhang. html

    .
    .
    .
{% if ANform_form %}
    {% for obj in ANform_form.instance %}
          <table class="table" width="100%" border="0" cellspacing="0" cellpadding="0">
            <thead class="thead-light">
                <tr>
                    <td width="11%" border="0" cellspacing="0" cellpadding="0">
                        <b>
                            {% csrf_token %}
                            {{ obj.Thema }}
                        </b>
                    </td>
                    <td width="15%" border="0" cellspacing="0" cellpadding="0">Username</td>
                    <td width="19%" border="0" cellspacing="0" cellpadding="0">Password</td>
                    <td width="18%" border="0" cellspacing="0" cellpadding="0">E-Mail</td>
                    <td width="37%" border="0" cellspacing="0" cellpadding="0">Anhang</td>
                    <td>
                    </td>
                    <td></td>
                </tr>
            </thead>
            <tbody>
                <td></td>
                <td>
                    {% csrf_token %}
                    {{ obj.Username }}
                </td>
                <td>
                    {% csrf_token %}
                    {{ obj.Password }}
                </td>
                <td>
                    {% csrf_token %}
                    {{ obj.Email }}
                </td>
                <td>
                    {% csrf_token %}
                    {{ obj.Anhang }}
                </td>
                <td>
                    <a href=""><button type="button" class="btn btn-danger">Löschen</button></a> </td>
                </td>
            </tbody>
          </table>
    {% endfor %}
{% endif %}

models.py

class Anhang(models.Model):
    KN = models.IntegerField(unique=False)
    Thema = models.CharField(max_length=100, blank=True, unique=False)
    Username = models.CharField(max_length=100, blank=True, unique=False)
    Password = models.CharField(max_length=100, blank=True, unique=False)
    Email = models.CharField(max_length=100, blank=True, unique=False)
    Anhang = models.CharField(max_length=250, blank=True, unique=False)

forms.py

class ANform(forms.ModelForm):

    class Meta:
        model = Anhang
        fields = ['KN', 'Thema', 'Username', 'Password', 'Email', 'Anhang']
        required = ()
        labels = {
            'KN': 'KN',
            'Thema': 'Thema:',
            'Username': 'Username',
            'Password': 'Password',
            'Email': 'Email',
            'Anhang': 'Anhang',
        }


class CreateANform(forms.ModelForm):

    class Meta:
        model = Anhang
        fields = ['KN', 'Thema', 'Username', 'Password', 'Email', 'Anhang']
        required = ()
        labels = {
            'KN': 'KN',
            'Thema': 'Thema:',
            'Username': 'Username',
            'Password': 'Password',
            'Email': 'Email',
            'Anhang': 'Anhang',
        }

class KontaktForm(forms.ModelForm):

    def clean_kundennummer(self):
        KN = self.cleaned_data['KN']
        if Kunden.objects.filter(KN_iexact=KN).exists():
            raise forms.ValidationError('Diese Kundennummer ist bereits vergeben')
        return KN

    class Meta:
        model = Kunden
        fields = ['KN', 'Anrede', 'Name', 'Vorname', 'Infos']
        required = ()
        labels = {
            'KN': 'Kundennummer',
            'Anrede': 'Anrede',
            'Name': 'Name',
            'Vorname': 'Vorname',
            'Infos': 'Infos',
        }

class InfoKontaktoForm(forms.ModelForm):

    def clean_kundennummer(self):
        KN = self.cleaned_data['KN']
        if Kunden.objects.filter(KN_iexact=KN).exists():
            raise forms.ValidationError('Diese Kundennummer ist bereits vergeben')
        return KN

    class Meta:
        model = Kunden
        fields = ['KN', 'Anrede', 'Name', 'Vorname']
        required = ()
        labels = {
            'KN': 'Kundennummer:',
            'Anrede': 'Anrede:',
            'Name': 'Name:',
            'Vorname': 'Vorname',
        }

как мне это исправить? уже пробовал с "get_list_or_404" & Anhang.objects.all ()

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

На самом деле all() функция django ORM принимает только один аргумент как self.

Таким образом, вы не можете передать набор запросов во все (). Здесь вы можете проверить, как работает all () в строке 909.

Итак, вам нужно заменить item15 на ниже ...

item15 = Anhang.objects.filter(KN=item.KN)

Для повторения l oop в шаблоне вы должны написать следующий код ...

{% for obj in ANform_form.instance %}
    {{ obj.Thema }}
    {{ obj.Username }}
{% endfor %}

Я написал просто для l oop, вы можете написать html в соответствии с вашими требованиями для l oop.

0 голосов
/ 26 февраля 2020

Вы не можете передавать аргументы .all, поскольку он предназначен для возврата всех объектов. Вам следует заменить

item15 = Anhang.objects.all(Anhang.objects.filter(KN=item.KN))

на

item15 = Anhang.objects.filter(KN=item.KN)

В качестве альтернативы, если есть только один элемент, который вы можете сделать

item15 = Anhang.objects.get(KN=item.KN)
...