Невозможно назначить «Math»: «SubjectClas.subject» должен быть экземпляром «Subject» - PullRequest
1 голос
/ 29 мая 2020

Итак, у меня проблемы с моим django проектом. Я m wanting to assign Subject from droplist(that formed from database called Subject) to another database called SubjectClas but I м продолжаю получать эту ошибку. Какие-либо предложения? Спасибо.
Невозможно назначить «Math»: «SubjectClas.subject» должен быть экземпляром «Subject».

Мой код из html

{% block add %}
<form action="{% url 'marks:addsubject' class.id%}" method="POST">
            {% csrf_token %}
            <select required name="sub">
                {% for d in subjectslist %}
                  <option value='{{d.id}}'>{{d.SubjectName}}</option>
                {% endfor %}
            </select>
            <button type="submit">готово</button>
</form>
{% endblock %}

Мои модели. py

from django.db import models
class Class(models.Model):
    classtitle = models.CharField('класс', max_length = 50)
    def __str__(self):
        return self.classtitle
class Subject(models.Model):
    SubjectName = models.CharField('Предмет', max_length =50)
    def __str__(self):
        return self.SubjectName
class SubjectClas(models.Model):
    subject = models.ForeignKey(Subject, null=True, on_delete= models.SET_NULL)
    clas = models.ForeignKey(Class, null=True, on_delete= models.SET_NULL)

My views.py

def addsubject(request, classid):
    try:
        a = Class.objects.get( id = classid )
    except:
        raise Http404("Http404")
    SubjectClas.objects.create(subject = request.POST['sub'], clas = a)

Спасибо.

1 Ответ

0 голосов
/ 29 мая 2020

subject - это ForeignKey для модели Subject, поэтому, передав строку, это не сработает.

Однако вы можете создать или получить объект Subject, например, с помощью .get_or_create(&hellip;) [Django -doc] :

from django.shortcuts import redirect
from django.views.decorators.http import <b>require_http_methods</b>

@require_http_methods(['POST'])
def addsubject(request, classid):
    subject, __ = Subject.objects.get_or_create(name=request.POST['sub'])
    SubjectClas.objects.create(subject=subject_id, clas_id=classid)
    return redirect(<i>'name-of-some-view'</i>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...