Я просмотрел около 50 вопросов о переполнении стека, а также многочисленные статьи в Google, но у меня болит голова, и я просто не понимаю этого.
У меня есть следующие таблицы и поля базы данных:
Cases:
--id
--Name
Information:
--id
--case_id
--detail
Я хочу подсчитать, сколько информационных записей существует для каждого случая.
Итак,код psuedo это будет что-то вроде:
SELECT COUNT(*) FROM Information WHERE case_id=id
или подобное. Мой желаемый вывод выглядит примерно так:
Дело № 1 содержит 43 записи информации. Дело № 2 содержит 16 записей информации. Дело № 3 имеет 8 записей информации
и т. Д. *
Я пытался в основном использовать функцию аннотирования в django, а затем указывать внешние ключи в файле models.py.
Мне кажется, что я запутался, поскольку сейчас я пробовал много вещей.
views.py:
def cases(request):
#didnt work - number = Cases.objects.annotate(Count('id'))
#didn't work - questions = Information.objects.annotate(number_of_information_records=Count('id'))
#didn't work - results = Information.objects.annotate(number_of_information_records=Count((Case(When(Cases.id == Information.case_id), output_field=IntegerField()))))
models.py:
class Cases(models.Model):
id = models.AutoField(db_column='ID', primary_key=True) # Field name made lowercase.
name = models.CharField(db_column='Case_Name', max_length=255) # Field name made lowercase.
##this was an attempt to get it to work
##information = models.ForeignKey("Information", on_delete=models.CASCADE, db_column="id")
def __str__(self):
return self.name
class Meta:
managed = False
db_table = 'Cases'
verbose_name_plural = "Cases"
class Information(models.Model):
id = models.AutoField(db_column='ID', primary_key=True) # Field name made lowercase.
case_id = models.IntegerField(db_column='Case_ID', blank=True, null=True) # Field name made lowercase.
class Meta:
managed = False
db_table = 'Information'
verbose_name_plural = "Information"
Код просто не работает, он часто запускается без ошибок, но ничего не выводится или выводит простообъекты без детализации я хочу.