Есть ли решение ввести подсказку в аннотации Django?Python

Программы на Python
Ответить
Anonymous
 Есть ли решение ввести подсказку в аннотации Django?

Сообщение Anonymous »

У меня есть проект django, который я пытаюсь набрать и добавить проверку типов через mypy.
Я хочу использовать аннотации django, чтобы получить больше информации об объекте. Эта операция добавляет свойства к уже объявленному классу.
Пакет django-stubs уже предоставляет класс типизации WithAnnotations, который должен выполнять всю работу, но он этого не делает.
Для ясности: я просто хочу, чтобы этот код передавал mypy

Код: Выделить всё

from django.db import models

class User(models.Model):
first_name: models.CharField()
last_name: models.CharField()

class Team(models.Model):
users: models.ManyToManyField(User)

class House(models.Model):
inhabitants: models.ManyToManyField(User)

users = User.objects.all()
for user in users:
print(user.first_name)

users_with_teams = Users.objects.all().annotate(teams_ids=ArrayAgg(...))
users_with_teams_and_houses = users_with_teams.annotate(houses_ids=ArrayAgg(...))

for user in users_with_teams:
print(user.first_name)
print(user.teams_ids)
print(user.houses_ids)

Если я попытаюсь запустить его, я получаю ошибки: объект «Пользователь не имеет атрибута groups_ids» или объект «Пользователь не имеет атрибута house_ids»
Я подумал, что было бы неплохо иметь это в функциях:

Код: Выделить всё

from typing import TypeVar

T = TypeVar("T")

def annotate_teams(query: QuerySet[T]) -> QuerySet[SomethingElseButWhat]:
return query.annotate(teams_ids=ArrayAgg(...))
но я не знаю, какой тип должна возвращать моя функция.
Кто-нибудь из вас знает, возможно ли то, что я ищу?< /п>

Подробнее здесь: https://stackoverflow.com/questions/792 ... annotation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»