Factory-метод модели Django
Никак не мог придумать, как озаглавить статью). Просто есть две вещи, которые хотел упомянуть.
Создаём метод класса, возвращающий модели класса, который может вернуть и только указанные поля всех удовлетворяющих условиям моделей.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from django.db import models from django.contrib.auth.models import User from django.db.models import Q class Exercise( models.Model ): name = models.CharField( max_length = 255 ) is_paired = models.BooleanField( default = False ) user = models.ForeignKey( User, blank = True, null = True ) @classmethod def getExercisesForUser(cls, User, Fields = ()): query = cls.objects.filter(Q(user = None) | Q(user = User)) if Fields: query = query.only(*Fields) return query |
Здесь нужно выделить два важных момента:
-
1cls.objects.filter(Q(user = None) | Q(user = User))
Здесь создаётся фильтр моделей, созданных конкретным пользователем или не относящимся ни к какому пользователю. Подробнее о сложных запросах с Q-объектами. -
1query.only(*Fields)
Если переданы названия полей, то достаются не все поля моделей, а только конкретные. Подробнее о выборке некоторых полей моделей.
Similar Posts
- None Found
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.
2 Responses so far.