ПРИСОЕДИНИТЬСЯ Два стола в DJANGO с заполнителем - PullRequest
0 голосов
/ 13 февраля 2019

Я уже месяц играю с django, и я застрял с JOINING на двух столах с Aggregate.Вот мой models.py

class Student(models.Model):
    student_number_format = RegexValidator(regex=r"^20{1,2}[1-2][0-9]-[0-9]{6}", message="Please enter a valid student number (example:2019-123456)")
    student_number  = models.CharField(validators=[student_number_format], max_length=11, blank=True, unique=True, help_text="Student number must be this format 20YY-99999")
    student_course  = models.ForeignKey(Course, on_delete=models.CASCADE)
    first_name      = models.CharField(max_length=255)
    middle_initial  = models.CharField(max_length=2)
    last_name       = models.CharField(max_length=255)
    profile_picture = models.ImageField(upload_to=user_directory_path)
    date_registered = models.DateTimeField(default=timezone.now)

class DataSets(models.Model):
    student_info  = models.ForeignKey(Student, on_delete=models.CASCADE)
    dataset_image = models.ImageField(upload_to=dataset_directory_path)
    date_upload   = models.DateTimeField(default=timezone.now)

Здесь у меня есть две модели, у класса DataSets есть внешний ключ для студента.И я хочу показать только студенты, которые имеют 5 или более данных в DataSets.Вот SQL-представление:

SELECT Count(student_info) as Count, A.first_name as Name 
FROM Student A
JOIN DataSets B ON A.id = B.student_info_id
WHERE Count >= 5

1 Ответ

0 голосов
/ 13 февраля 2019

Вы можете сделать это с помощью select_related ссылки .Я надеюсь, что следующий запрос будет работать.

DataSets.objects.select_related('student_info').annotate(
     entries=models.count()).filter(entries__gte=5)
...