@bituke

Как создать функцию под моделью django с фильтрацией объектов?

Допустим есть модель портфеля, мне нужно создать функцию, при обращении к которой будут возвращены все обьекты с данным фильтром, я пытаюсь сделать это так, но оно не работает:
class Portfolio(models.Model):
	client = models.ForeignKey(Client, on_delete=models.CASCADE, related_name='portfolio')
	name = models.CharField('название', max_length=255)

	def get_portfolio(self):
		return self.objects.filter(name='123').all()


Как это можно реализовать?
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
Mi11er
@Mi11er
A human...
Ну так у вас же функция для объекта класса.

Как вариант , сделать методом класса
class Model(ModelBase):
    some = models.CharField(_("Что то "), max_length=250)

    @classmethod
    def get_model(cls):
        return cls.objects.filter(title__icontains="123")


и получить уже вот так
from core.models import Model
Model.get_model()
<QuerySet []>
m1 = Model(title="123")
m1.save()
Model.get_model()
<QuerySet [<Model: 123>]>


p.s. не претендую на самое верное/лучшее решение, может кто из кураторов подскажет лучше.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@MEDIOFF
Python Developer
Используйте свой менеджер:
from django.db import models

class PortfolioManager(models.Manager):
    def get_portfolio(self):
        return self.get_queryset.filter(name='123')

class Portfolio(models.Model):
    client = models.ForeignKey(Client, on_delete=models.CASCADE, related_name='portfolio')
    name = models.CharField('название', max_length=255)

    objects = PortfolioManager()

Portfolio.objects.get_portfolio()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы