Я хочу определить псевдоним для набора, связанного с иностранным ключом, чтобы затем его можно было использовать в общей функции фильтрации. Чтобы объяснить, более подробно, вот упрощенный пример моего варианта использования, демонстрируя, чего я пытаюсь достичь:
models.py
from django.db import models
class Family(models.Model):
family_name = models.CharField(max_length=100)
pets: models.Manager['Pet'] = ...
members: models.Manager['Person'] = ...
def __str__(self):
return f'{self.id} - {self.family_name}'
class Pet(models.Model):
class PetType(models.TextChoices):
CAT = 'cat'
DOG = 'dog'
LIZARD = 'lizard'
name = models.CharField(max_length=100)
type = models.CharField(max_length=100, choices=PetType)
family = models.ForeignKey(Family, on_delete=models.CASCADE, related_name='pets')
def __str__(self):
return f'{self.id} - {self.name} {self.family.family_name} [{self.type}]'
class Person(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
family = models.ForeignKey(Family, on_delete=models.CASCADE, related_name='members')
@property
def pets(self) -> models.Manager[Pet]:
return self.family.pets
def __str__(self):
return f'{self.id} - {self.name} {self.family.family_name}'
Если у меня есть объект человека , я могу использовать его свойство Pets , чтобы получить домашних животных из семьи, я ищу способ для Добавьте псевдоним/аннотацию/что угодно в запрос человека , чтобы я мог определить:
def has_a_cat(query_set):
return query_set.filter(pets__type='cat')
и затем иметь возможность использовать это как для наборов запросов Family, так и для Person. Я знаю, что могу фильтровать набор запросов Person по типу домашнего животного, потому что Person.objects.filter(family__pets__type='cat') работает отлично, но мне нужен способ использовать псевдоним Family__pets домашним животным, чтобы я мог использовать общий фильтр.
Я пробовал использовать .annotate(pets=F('family__pets')) и .alias(pets=F('family__pets)) но затем при фильтрации по pets__type я получаю следующую ошибку:
django.core.exceptions.FieldError: Unsupported lookup 'type' for BigAutoField or join on the field not permitted.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-django
Могу ли я определить псевдоним для иностранного поля в Джанго? ⇐ Python
Программы на Python
-
Anonymous
1737977698
Anonymous
Я хочу определить псевдоним для набора, связанного с иностранным ключом, чтобы затем его можно было использовать в общей функции фильтрации. Чтобы объяснить, более подробно, вот упрощенный пример моего варианта использования, демонстрируя, чего я пытаюсь достичь:
[b] models.py [/b]
from django.db import models
class Family(models.Model):
family_name = models.CharField(max_length=100)
pets: models.Manager['Pet'] = ...
members: models.Manager['Person'] = ...
def __str__(self):
return f'{self.id} - {self.family_name}'
class Pet(models.Model):
class PetType(models.TextChoices):
CAT = 'cat'
DOG = 'dog'
LIZARD = 'lizard'
name = models.CharField(max_length=100)
type = models.CharField(max_length=100, choices=PetType)
family = models.ForeignKey(Family, on_delete=models.CASCADE, related_name='pets')
def __str__(self):
return f'{self.id} - {self.name} {self.family.family_name} [{self.type}]'
class Person(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
family = models.ForeignKey(Family, on_delete=models.CASCADE, related_name='members')
@property
def pets(self) -> models.Manager[Pet]:
return self.family.pets
def __str__(self):
return f'{self.id} - {self.name} {self.family.family_name}'
Если у меня есть объект человека , я могу использовать его свойство Pets , чтобы получить домашних животных из семьи, я ищу способ для Добавьте псевдоним/аннотацию/что угодно в запрос человека , чтобы я мог определить:
def has_a_cat(query_set):
return query_set.filter(pets__type='cat')
и затем иметь возможность использовать это как для наборов запросов Family, так и для Person. Я знаю, что могу фильтровать набор запросов Person по типу домашнего животного, потому что Person.objects.filter(family__pets__type='cat') работает отлично, но мне нужен способ использовать псевдоним Family__pets домашним животным, чтобы я мог использовать общий фильтр.
Я пробовал использовать .annotate(pets=F('family__pets')) и .alias(pets=F('family__pets)) но затем при фильтрации по pets__type я получаю следующую ошибку:
django.core.exceptions.FieldError: Unsupported lookup 'type' for BigAutoField or join on the field not permitted.
Подробнее здесь: [url]https://stackoverflow.com/questions/79390586/can-i-define-an-alias-to-a-foreign-field-in-django[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия