2017-01-20 3 views
0

Итак, у меня есть этот запрос django. Первые два утверждения необходимы для получения третьего утверждения. Мой вопрос в том, есть ли способ использовать только 3-х операторы без использования первых двух операторов.Упрощение этого запроса django - получить экземпляры django на основе значений

#patient_name and quest are two strings 
patientobj = modelPatient.objects.get(patient_name=patient_name) 
questobj = modelInterviewQuestion.objects.get(question=quest) 
answer = modelInterviewAnswer.objects.get(patients=patientobj, questions=questobj) 

Я знаю, что я мог бы сделать что-то вроде этого

answer = modelInterviewAnswer.objects.get(patients= modelPatient.objects.get(patient_name=patient_name), questions= modelInterviewQuestion.objects.get(question=quest)) 

, но мне было интересно, если есть что-нибудь попроще?

Вот взаимосвязь между моделями

class modelPatient(models.Model): 
    patient_name  = models.CharField(max_length=128, unique=False) 
    patient_sex  = models.CharField(max_length=128, unique=False) 
    patient_image  = models.ImageField(upload_to='images/', 

class modelInterviewQuestion(models.Model): 
    question  = models.CharField(max_length=1000, unique=True) 

class modelInterviewAnswer(models.Model): 
    patients = models.ForeignKey(modelPatient) 
    questions = models.ForeignKey(modelInterviewQuestion) 
    patient_response = models.CharField(max_length=1000, unique=True) 
+0

Просьба указать связь между моделями. – Darshit

+0

Позвольте мне уточнить вопрос –

+0

@ Darshit только что обновил мой вопрос с большим количеством контекстов –

ответ

1

Попробуйте это.

answer = modelInterviewAnswer.objects.get(patients__patient_name=patient_name, questions__question=quest) 

Пожалуйста, пройти через эту документацию, чтобы узнать, как написать запрос, который span relationship.

Я хочу обратить ваше внимание на именовании.

  1. Не префиксов название модели с model, например modelPatient должен быть только Patient.
  2. Не нужно писать patient_<field_name> в модели. Это должно быть только <field_name>

Например ваша Paitent модель должна выглядеть

class Patient(models.Model): 
    name = models.CharField(max_length=128, unique=False) 
    sex = models.CharField(max_length=128, unique=False) 
    image = models.ImageField(upload_to='images/') 

Следовать же инструкции для других моделей тоже.

class InterviewQuestion(models.Model): 
    question = models.CharField(max_length=1000, unique=True) 

class InterviewAnswer(models.Model): 
    patients = models.ForeignKey(modelPatient) 
    interview_questions = models.ForeignKey(modelInterviewQuestion) 
    patient_response = models.CharField(max_length=1000, unique=True) 

Так что ваш запрос будет.

answer = InterviewAnswer.objects.get(patients__name=patient_name, interview_questions__question=quest) 
+0

Мне кажется, вам нужно 2 подчеркивания в question_question (т. Е. «Questions__question») –

+0

@ Darshit Я также считаю, что нам нужны два символа подчеркивания. Ill проверить это и отправить обратно –

+0

@JoeJ Спасибо за указание опечатки. Я обновил его. – Darshit

Смежные вопросы