Я строю приложение генеалогического древа в Джанго, где мне нужно представлять в браках симметрично. Каждый брак должен иметь только одну запись, а отношения должны включать обоих партнеров без дублирования данных. Вот соответствующая структура модели: < /p>
class Person(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
spouses = models.ManyToManyField(
'self', through="Marriage", symmetrical=True, related_name="partners"
)
class Marriage(models.Model):
person1 = models.ForeignKey(Person, on_delete=models.CASCADE, related_name="marriages_as_person1")
person2 = models.ForeignKey(Person, on_delete=models.CASCADE, related_name="marriages_as_person2")
start_date = models.DateField(null=True, blank=True)
end_date = models.DateField(null=True, blank=True)
< /code>
Я хочу: < /p>
[*] Убедитесь, что оба партнера появляются как супруги друг для друга симметрично. < /li>
Избегайте дублирующихся записей для одного и того же брака. < /li>
Эффективно запросить всех супругов человека. > Вот код, который я использую для запроса супругов: < /p>
# Query spouses for a person
p1 = Person.objects.create()
p2 = Person.objects.create()
Marriage.objects.create(person1=p1, person2=p2)
p1.spouses.all() # Returns list containing p2
p2.spouses.all() # Returns empty list
Однако я столкнулся с проблемами:
Если запрашиваются супруги p1, он должен содержать p2 и если запрашиваются супруги p2, он должен содержать p1
[*]Оба запроса не симметричны
Вопросы:
[*]Правильна ли структура моей модели для симметричного представления браков? Если нет, то какие улучшения мне следует внести?
[*]Как я могу эффективно запрашивать всех супругов человека с помощью оптимизированной базы данных, обеспечивая при этом симметрию?
Мой вариант использования — вернуть список или человека, имеющего pids (идентификатор партнера) в виде списка идентификаторов, как показано ниже, с использованием DRF
[
{
id: 1,
full_name: ‘John’,
pids: [2]
},
{
id: 2,
full_name: ‘Mary’,
pids: [1]
}
]
Подробнее здесь: https://stackoverflow.com/questions/793 ... amily-tree
Django: как представлять и запрашивать симметричные отношения для генеалогического древа? ⇐ Python
Программы на Python
1737692050
Anonymous
Я строю приложение генеалогического древа в Джанго, где мне нужно представлять в браках симметрично. Каждый брак должен иметь только одну запись, а отношения должны включать обоих партнеров без дублирования данных. Вот соответствующая структура модели: < /p>
class Person(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
spouses = models.ManyToManyField(
'self', through="Marriage", symmetrical=True, related_name="partners"
)
class Marriage(models.Model):
person1 = models.ForeignKey(Person, on_delete=models.CASCADE, related_name="marriages_as_person1")
person2 = models.ForeignKey(Person, on_delete=models.CASCADE, related_name="marriages_as_person2")
start_date = models.DateField(null=True, blank=True)
end_date = models.DateField(null=True, blank=True)
< /code>
Я хочу: < /p>
[*] Убедитесь, что оба партнера появляются как супруги друг для друга симметрично. < /li>
Избегайте дублирующихся записей для одного и того же брака. < /li>
Эффективно запросить всех супругов человека. > Вот код, который я использую для запроса супругов: < /p>
# Query spouses for a person
p1 = Person.objects.create()
p2 = Person.objects.create()
Marriage.objects.create(person1=p1, person2=p2)
p1.spouses.all() # Returns list containing p2
p2.spouses.all() # Returns empty list
Однако я столкнулся с проблемами:
Если запрашиваются супруги p1, он должен содержать p2 и если запрашиваются супруги p2, он должен содержать p1
[*]Оба запроса не симметричны
Вопросы:
[*]Правильна ли структура моей модели для симметричного представления браков? Если нет, то какие улучшения мне следует внести?
[*]Как я могу эффективно запрашивать всех супругов человека с помощью оптимизированной базы данных, обеспечивая при этом симметрию?
Мой вариант использования — вернуть список или человека, имеющего pids (идентификатор партнера) в виде списка идентификаторов, как показано ниже, с использованием DRF
[
{
id: 1,
full_name: ‘John’,
pids: [2]
},
{
id: 2,
full_name: ‘Mary’,
pids: [1]
}
]
Подробнее здесь: [url]https://stackoverflow.com/questions/79383195/django-how-to-represent-and-query-symmetrical-relationships-for-a-family-tree[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия