无法分配“ <QuerySet [<子代:名称>]>”:“ Mark.MarkOwner”必须是“子代”实例

时间:2020-05-31 12:21:56

标签: python django

这是另一个愚蠢的问题。我真的对django很陌生,我不知道该怎么办。有人可以帮帮我吗?或发送一些文档页面?目的是使标记选择器分配给为其显示的子代。有一些我的代码。

我的HTML

db.collection.aggregate([
    {
        $addFields: {
            filteredCollections: {
                $filter: {
                    input: "$collections",
                    as: "collection",
                    cond: {
                       $setIsSubset: [
                          ["$$collection.items"],
                          ["a", "g", "d", "e"]
                       ]
                   }
                }
            }
        }
    },
    {
        $match: {
            "filteredCollections.0": {$exists: true}
        }
    }
])

views.py

$setIsSubset

models.py

{% if child %}
  {% for c in child  %}
  <tr>
  <th>
  {{c.ChildName}}<br>
  </th>
  <th>
    <form action="{% url 'marks:addmark' class.id sc.id %}" method="POST">
                  {% csrf_token %}
              <select required name="sub">
                      <option value=1>1</option>
                      <option value=2>2</option>
                      <option value=3>3</option>
                      <option value=4>4</option>
                      <option value=5>5</option>
                      <option value=6>6</option>
                      <option value=7>7</option>
                      <option value=8>8</option>
                      <option value=9>9</option>
                      <option value=10>10</option>
                      <option value=11>11</option>
                      <option value=12>12</option>
              </select>
              <button type="submit">готово</button>
              </form>
  </th>
</tr>
{% endfor %}
{% endif %}

urls.py

def mlat(request, classid, subjectid):
    a = Class.objects.get( id = classid )
    b = SubjectClas.objects.get( id = subjectid )
    d = Child.objects.filter(ChildClass = a)
    c = Mark.objects.filter(MarkSubjet = b)
    return render(request, 'marks/mlat.html', {'class':a, 'sc':b, 'subjectsyes':c, 'child':d})
def addmark(request, classid, subjectid):
    a = Class.objects.get( id = classid )
    b = SubjectClas.objects.get( id = subjectid )
    d = Child.objects.filter(ChildClass = a)
    c = Mark.objects.filter(MarkSubjet = b)
    Mark.objects.create(Markd = request.POST['sub'], MarkSubjet = a, MarkOwner = d)
    return HttpResponseRedirect(reverse('marks:mlat', args=[b.id, a.id,]))

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

问题来自您: d = Child.objects.filter(ChildClass = a) .filter返回一个查询集,您不能将查询集分配给Mark.MarkOwner。

将其更改为:

d = Child.objects.get(ChildClass = a)

返回一个Child实例。

但是,如果Child不存在,则会返回错误,因此我建议使用:

if Child.objects.filter(ChildClass = a).exists():
    d = Child.objects.get(ChildClass = a)

这样,您可以处理不存在子代而不会崩溃的情况