Как получить только один предмет из ForeignKey Model в Django? - PullRequest
0 голосов
/ 02 июля 2018

В моем приложении две модели,

class Question(models.Model):
   question_text = models.CharField(max_length=200)
   question_author = models.ForeignKey(User, on_delete=models.CASCADE)
   q_pub_date = models.DateTimeField('Date Question Published')

   def __str__(self):
      return self.question_text


class Answer(models.Model):
   answer_text = models.CharField(max_length=5000)
   answer_author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='ans_auth')
   question = models.ForeignKey(Question, on_delete=models.CASCADE)
   a_pub_date = models.DateTimeField('Date Answer Published')

   def __str__(self):
      return self.answer_text

Я хочу показать последние вопросы на домашней странице в списке. Каждый элемент в списке будет содержать текст вопроса и один ответ из многих, опубликованных для этого конкретного вопроса. Я могу показать текст вопроса, но не могу найти способ получить элемент ответа для каждого элемента вопроса, на мой взгляд ниже,

def home(request):
   latest_question = Question.objects.order_by('-q_pub_date')[:15]

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Вы можете получить ответ на конкретный вопрос с обратным отношением question_instance.answer_set.all() в представлениях, {{ question_instance.answer_set.all }} в шаблонах.

Чтобы выбрать один ответ, вы можете использовать slice или first():

{{question_instance.answer_set.all.0 }} # templates

question_instance.answer_set.first() # views

Если вы хотите добавить новое поле votes к Вопросу и хотите получить ответ с наибольшим количеством голосов?

Метод свойства внутри вашей модели вопроса будет делать так:

@property
def higher_answer(self):
    return self.answer_set.all().order_by('vote').last()
0 голосов
/ 02 июля 2018

Вы можете получить доступ ко всем ответам, используя related_name:

>>> question = Question.objects.get(question_text='random question')
>>> print(question.answer_set.all())

Подробнее об этом можно прочитать на: https://docs.djangoproject.com/en/2.0/ref/models/fields/#django.db.models.ForeignKey.related_name

...