Привет У меня есть к следующему models.pyДжанго: Доступ к OneToOneField в шаблоне
class Question(models.Model):
user = models.ForeignKey(User)
article = models.ForeignKey(Article)
number = models.CharField("문제번호", max_length=10, null=True, blank=True)
q_type = models.CharField("문제유형", max_length=15)
question = models.TextField("문제내용")
answer = models.TextField("답안", null=True, blank=True)
reference = models.TextField("참고사항", null=True, blank=True)
def __str__(self):
return "%s번: %s" % (self.number, self.question)
class Professor(models.Model):
question = models.OneToOneField(Question, null=True, blank=True, related_name="related_professor")
articles = models.ManyToManyField(Article, null=True, blank=True)
name = models.CharField("교수이름", max_length=20)
def __str__(self):
return "%s" % (self.name,)
views.py:
def read_q_table(request, board_id, article_id):
article = get_object_or_404(Article, id=article_id)
context = {
"boards" : Board.objects.all(),
"board_id" : board_id,
"questions" : Question.objects.all().order_by("number"),
"article" : article,
"professor" : Professor.objects.all()
}
return render(request, "q_table.html", context)
Шаблон:
{% if questions %}
{% for question in questions %}
<div class="list-group-item">
<div class="row text-center">
<div class="col-xs-2 col-md-2">{{ question.related_professor.name }}</div>
</div>
</div>
{% endfor %}
{% else %}
То, что я хочу получить доступ имя поля профессора в шаблоне. Я передал в контекст список объектов класса вопросов в шаблон, и я хотел бы использовать атрибут OneToOneField, чтобы получить доступ к имени профессора в шаблоне.
Согласно Accessing Django OneToOneField in templates?, {{вопрос. related_professor.name}} должен работать, но это не так. Может ли кто-нибудь помочь? Спасибо.
Или это может быть проблема с сохранением данных профессора в первую очередь. Следующий код принимает форму ввода и отправляет их для их сохранения.
Professor.objects.get(name=professor).question = question_instance
Professor.objects.get(name=professor).save()
Эти две линии в def submit_question могут поднять бровь, но я не уверен. Здесь я пытаюсь получить экземпляр связанного профессора и обновить его поле вопроса (OneToOneField, относящееся к классу Question).
def submit_question(request, board_id, article_id):
article = get_object_or_404(Article, id= article_id)
try:
professor = request.POST["professor"].strip()
q_type = request.POST["q_type"].strip()
question = request.POST["question"].strip()
number = request.POST["number"].strip()
reference = request.POST["reference"].strip()
if request.POST['q_type']== "주관식":
answer = request.POST['d_answer'].strip()
else:
answer = request.POST['m_answer'].strip()
except KeyError:
request.session["error"] = "올바른 요청이 아닙니다."
return redirect("read_article", board_id, article_id)
if professor and q_type and question:
question_instance = article.question_set.create(q_type = q_type, question = question, user_id = request.user.id)
Professor.objects.get(name=professor).question = question_instance
Professor.objects.get(name=professor).save()
if number:
question_instance.number = number
if answer:
question_instance.answer = answer
if reference:
question_instance.reference = reference
question_instance.save()
else:
request.session["error"] = "출제교수, 문제유형 및 문제는 필수 입력 항목입니다."
return redirect("read_article", board_id, article_id)
return redirect("read_q_table", board_id, article_id)
Вы пробовали 'question.professor'? 'OneToOneField' являются специальными .. – mccc
@mccc Да. Но это не решает проблему. – Bossam
Действительно, вы должны использовать ModelForm для обновления вопроса; который избавится от целой загрузки этого кода, сделает проверку правильнее и, возможно, исправит вашу проблему. –