Как я могу построить модель Джанго, поля которой зависят от полей другой модели - PullRequest
0 голосов
/ 19 сентября 2019

В настоящее время я делаю простое приложение для газеты Django и работаю над моделью «Статьи», которая выглядит следующим образом:

class Article(models.Model):
    title = models.CharField(max_length=255)
    body = models.TextField()
    #date = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(
        get_user_model(),
        on_delete=models.CASCADE, 
    )
    topic = models.CharField(max_length=255)
    score_choices = [(-5,'-5'), (-4, '-4'), (-3,'-3'), (-2, '-2'), (-1,'-1'), 
    (0,'0'),(1,'1'), (2,'2'), (3,'3'), (4,'4'), (5,'5')]
    score = models.IntegerField(choices=score_choices, default=0)


Я пытаюсь создать другую модель, которая выглядит примерно так:

class Topic(models.Model):
    topic_name = models.CharField(max_length=255)
    average_score =

В рамках модели темы я хотел бы как-то запросить все статьи, для которых в качестве темы указана тема_объекта, а затем вернуть список баллов, которые были введены для статей с этой темой.

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

Подводя итог, у меня есть две модели: статья и тема.В статье также есть поле под названием «тема», и я хотел бы создать поле для моего класса Topic, которое является функцией поля оценки для всех объектов Article, чье поле «theme» согласуется с полем моего отдельного класса Topic.Я прошу прощения, если это сбивает с толку, и я не знаю всей терминологии, поскольку я пытаюсь учить себя.

Я прочитал страницы документации Django по моделям, запросам, отношениям «многие ко многим» и различным другим свойствам.Я все еще не уверен относительно решения.

1 Ответ

1 голос
/ 19 сентября 2019

Будет работать что-то вроде следующего, используя агрегацию :

from django.db.models.aggregates import Avg

class Topic(models.Model):
    topic_name = models.CharField(max_length=255)

    def average_score(self):
        return Article.objects.filter(topic=self.topic_name).aggregate(avg=Avg('score')).get('avg')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...