Django запрос для связи многих со многими, чтобы найти пользователя - PullRequest
0 голосов
/ 25 апреля 2020

это моя модель:

class Student(models.Model):
   user = models.OneToOneField(User,on_delete=models.CASCADE)
   frist_name = models.CharField(max_length=250)
   last_name = models.CharField(max_length=250)
   father_name = models.CharField(max_length=250)
   national_code = models.CharField(max_length=12)
   date_of_birth = models.DateField()
   phone_regex = RegexValidator(regex=r'(\+98|0)?9\d{9}', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.",)
   phone_number = models.CharField(validators=[phone_regex], max_length=13, 
   blank=True,help_text='Do like +98913.......') # validators should be a list
   CHOICES = (
    ('male','Male'),
    ('female','Female')
   )
   gender = models.CharField(choices=CHOICES,max_length=6)
   date_created = models.DateTimeField(auto_now_add=True)

   def __str__(self):
       return (self.frist_name)


class Classes(models.Model):
   book = models.CharField(max_length=250)
   grade = models.CharField(max_length=250)
   teacher = models.ForeignKey(Teacher,on_delete=models.CASCADE)
   student = models.ManyToManyField(Student,related_name='student')
   date_created = models.DateTimeField(auto_now_add=True)

   def __str__(self):
       return self.grade

как мне сделать запрос, чтобы найти книгу пользователя и оценку для конкретного c студента?

Например: имя первого Мохаммед и фамилия kavosi и имя пользователя 0605605605 Я хочу найти оценку и книгу этого пользователя.

Моя модель действительна или нет?

1 Ответ

0 голосов
/ 25 апреля 2020

Прежде всего, имя вашей модели "Классы" должно быть в единственном числе, может быть что-то вроде "Курс". И затем в этой модели я вижу, что у нее есть многозначное поле «ученик», его родственное имя должно быть чем-то, что модель ученика использует для обозначения «Курс», поэтому родственное имя должно быть «курсы».

Поэтому ваша модель «Классы» должна выглядеть следующим образом:

class Course(models.Model):
   book = models.CharField(max_length=250)
   grade = models.CharField(max_length=250)
   teacher = models.ForeignKey(Teacher,on_delete=models.CASCADE)
   student = models.ManyToManyField(Student,related_name='courses')
   date_created = models.DateTimeField(auto_now_add=True)

   def __str__(self):
       return self.grade

Чтобы ответить на ваш вопрос о том, как найти оценку и учебники, поскольку учащийся может посещать различные курсы, вы можете получить соответствующую оценку и Записывайтесь на каждый курс студента Джейн Доу, выполнив:

student = Student.objects.get(first_name='Jane', last_name='Doe')
courses = student.courses.all()
grade_book_list = couses.values_list('book', 'grade')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...