0

次のようなモデルがあります。

class Venture(models.Model):
    name = models.CharField(_('name'), max_length=255)
    created = models.DateTimeField(editable=False)
    modified = models.DateTimeField()


class QuestionSet(models.Model):
    title = models.CharField(_(u'title'), max_length=100)


class Question(models.Model):
    title = models.CharField(_(u'title'), max_length=255)
    qset = models.ForeignKey(QuestionSet, related_name='questions')


class Answer(models.Model):
    question = models.ForeignKey(Question, related_name='answers')
    responder = models.ForeignKey(User)
    venture = models.ForeignKey(Venture, related_name='answers')
    text = models.TextField(_(u'answer'), blank=True, null=True)
    timestamp = models.DateTimeField(auto_now_add=True)

すべてのユーザー向けに事前定義された一連の質問があります。ベンチャーごとに、各 QuestionSet のページがあり、そのセット内の質問が一覧表示され、次のように質問をループします。

<div> {{ venture.name }} </div>
{% for question in qset.questions.all %}
  <div class="qset-question control-group">
    {{ question.title }}
    {# How do I access the answer for the current venture? #}
  </div>
{% endfor %}

問題は、現在のベンチャーでその質問の答えを得る最善の方法は何かということです。ここで答えに関する情報を出力したいと思います。

どんな助けでも大歓迎です。

4

3 に答える 3

0

最も簡単な解決策は、特定の「ベンチャー」の回答を選択することです。これにより、回答のリストが表示されます。これを使用して、ベンチャーのすべての質問を取得できます。

だから、このようなもの:

ans = Answer.objects.filter(venture=v)

編集::

あなたが言ったことに基づいて、モデルを作り直す必要があります。私が見ることができるいくつかの短所があります(私はあなたにそれを理解させます)。それ以外の場合は、複数のクエリを実行し、ビューに複数のクエリ セットを与える必要があります。

于 2013-05-20T11:31:30.967 に答える
0

このようなものはどうですか?

models.py

from django.db import models
from django.contrib.auth import get_user_model
from django.utils.translation import ugettext as _

User = get_user_model()

class Venture(models.Model):
    name = models.CharField(_('name'), max_length=255)
    created = models.DateTimeField(auto_now_add=True, editable=False)
    modified = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

class Question(models.Model):
    title = models.CharField(_(u'title'), max_length=255)

    def __str__(self):
        return self.title

class VentureQuestion(models.Model):
    venture = models.ForeignKey('Venture', related_name='questions')
    question = models.ForeignKey('Question', related_name='venture_questions')

    def __str__(self):
        return "{}: {}".format(self.venture, self.question)

class Answer(models.Model):
    question = models.ForeignKey('VentureQuestion', related_name='answers')
    responder = models.ForeignKey(User, related_name='answers')
    text = models.TextField(_(u'answer'), blank=True, null=True)
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return "{}: {}".format(self.responder.username, self.text)

admin.py

from django.contrib import admin

from example.models import Venture, VentureQuestion, Question, Answer


class AnswerInline(admin.StackedInline):
    model = Answer
    extra = 0


class VentureQuestionAdmin(admin.ModelAdmin):
    inlines = [AnswerInline]


admin.site.register(Venture)
admin.site.register(VentureQuestion, VentureQuestionAdmin)
admin.site.register(Question)
admin.site.register(Answer)

Questionそうすれば、関連するそれぞれについて答えを得ることができますVenture...(少なくともそれがあなたが探している機能のように聞こえます...)

>>> from example.models import Venture
>>> ventures = Venture.objects.all()
>>> for venture in ventures:
...     for venture_question in venture.questions.all():
...         venture_question.question.title
...
u'What is this?'
u'How does this work?'
u'Does this even work?'
>>> for venture in ventures:
...     for venture_question in venture.questions.all():
...         venture_question.question.title, [answer.text for answer in venture_question.answers.all()]
...         
(u'What is this?', [])
(u'How does this work?', [u'It just does!'])
(u'Does this even work?', [u'Sure it does...', u'I think so'])

Venture同じものを使用するQuestionが異なるものを別のものにすることができますAnswers

>>> venture = Venture.objects.get(name='Another Venture')
>>> for venture_question in venture.questions.all():
...     venture_question.question.title, [answer.text for answer in venture_question.answers.all()]
...     
(u'What is this?', [])

Answer新しいにを追加した後VentureQuestion

>>> venture = Venture.objects.get(name='Another Venture')
>>> for venture_question in venture.questions.all():
...     venture_question.question.title, [answer.text for answer in venture_question.answers.all()]
...     
(u'What is this?', [u"It's another venture with the same question and it's own answers..."])
于 2013-05-20T15:31:35.213 に答える