Вопросы с тегами [django-orm]

0

голосов
0

ответ
5

Просмотры

Группировка QuerySet по значению столбца

У меня есть QuerySet, возвращающие задачи по идентификатору клиента из следующих моделей и хотел бы получить еще несколько фильтров, чтобы получить более уточненные данные. Модели являются лишь примером структурой, что я пытаюсь достичь: класс Client (models.Model): Имя = models.CharField (max_length = 255) Защита __str __ (Я): возвращение класса self.name офис (models.Model): имя = models.CharField (max_length = 255) ClientID = models.ForeignKey (Клиент, db_constraint = False, db_index = False, on_delete = models.DO_NOTHING) Защита __str __ (Я): возвращение класс self.name Площади (models.Model): имя = models.CharField (max_length = 255) officeid = models.ForeignKey (Office, db_constraint = False, db_index = False, on_delete = models.DO_NOTHING) Защита __str __ (Я): возвращение self.name класс Task (models.Model): имя = модели. CharField (max_length = 255) Areaid = models.ForeignKey (площадь, db_constraint = False, db_index = False, on_delete = models.DO_NOTHING) Запрос, что я использую: Task.objects.filter (areaid__officeid__clientid = '1') возвращает длинный QuerySet, что мне нужно группе Areaid. Группировка Я имею в виду, например, получение списка нескольких querysets, которые содержат только задачи для одного Areaid. Есть ли возможность достичь этого Джанго ОРМ без зацикливания через QuerySet у меня уже есть? Мне это нужно, чтобы сделать различные таблицы в Jinja2, уникальную таблицу для каждого Areaid. Группировка Я имею в виду, например, получение списка нескольких querysets, которые содержат только задачи для одного Areaid. Есть ли возможность достичь этого Джанго ОРМ без зацикливания через QuerySet у меня уже есть? Мне это нужно, чтобы сделать различные таблицы в Jinja2, уникальную таблицу для каждого Areaid. Группировка Я имею в виду, например, получение списка нескольких querysets, которые содержат только задачи для одного Areaid. Есть ли возможность достичь этого Джанго ОРМ без зацикливания через QuerySet у меня уже есть? Мне это нужно, чтобы сделать различные таблицы в Jinja2, уникальную таблицу для каждого Areaid.
tookas92
1

голосов
1

ответ
33

Просмотры

Найти модели, которые имеют только одну конкретную модель связанной

Рассмотрим следующие модели: класс продукта (models.Model): Имя = models.CharField (max_length = ...) класс Размер (models.Model): Имя = models.CharField (max_length = ...) продукция = models.ManyToManyField (продукт, через = ProductXSize, related_name = 'размеров', related_query_name = 'размер') класс ProductXSize (models.Model): продукт = models.ForeignKey (продукт, on_delete = models.CASCADE, related_name = 'productxsizes', related_query_name =» productxsize ') размер = models.ForeignKey (размер, on_delete = models.CASCADE, related_name =' productxsizes', related_query_name = 'productxsize') То, что я хотел бы достичь вдоль линий: для р в Product.objects.filter (размеры = [Size.object.get (...)]): ... То есть, найти продукты, которые имеют один размер и определенный в этом.
x-yuri
1

голосов
1

ответ
66

Просмотры

Count occurrences of values on a single column grouped by week

I'm trying to accomplish this using Django 2.0 ORM, but if you can solve this with a raw SQL query that would be very helpful too. Say for example I have a table with the column "destination", which will always be the name of a city, such as "Los Angeles", "New York", "San Francisco", or "Seattle" (but we don't know in advance how many different cities there could be). I need a SQL query (or Django ORM code) that will get me a count of all the cities for a specified date range, grouped by the record's week (based on created_at timestamp, with weeks starting on Mondays). Here is an example of the Django model (very simple): from django.db import models from django.utils import timezone class Package(models.Model): id = models.AutoField(serialize=False, primary_key=True) name = models.CharField(max_length=64) email = models.CharField(max_length=128, unique=True) phone = models.CharField(max_length=32) destination = models.CharField(max_length=64) created_at = models.DateField(db_index=True, default=timezone.now) updated_at = models.DateField(default=timezone.now) And here is an example of the desired output, structured as JSON: { "2017-06-05-2017-06-11": { "Los Angeles": 100, "New York": 50, "Copenhagen": 20 }, "2017-06-12-2017-06-18": { "Los Angeles": 10, "Toronto": 23, "Las Vegas": 21, "Carson City": 8, "Raleigh": 1 }, "2017-06-19-2017-06-25": { "Toronto": 24, "Tokyo": 75, "Kansas City": 123, "Salem": 84, "Bismarck": 22, "Boise": 77, "Las Vegas": 123 } } Note that the results can vary in size, the date ranges all start on a Monday and end on a Sunday (both inclusive), and the city names are variable and unknown. I know there are ways to build this into Python logic and do many queries, but I'm hoping we can do this in a single query. Thanks!
Florence
1

голосов
1

ответ
308

Просмотры

Django 2.0 - iexact переводит НРАВИТСЯ и не ILIKE

У меня есть модель, как это: класс статья (models.Model): название = models.CharField (max_length = 200) содержание = models.TextField () Класс Meta: db_table = 'статья' и я пишу запрос: статьи = ст. objects.filter (title__iexact = 'привет мир') печать (articles.query) выход: SELECT ... FROM `article` WHERE` article`.`title` LIKE привет мир Вы можете увидеть iexact переводится на LIKE. Но Джанго документация говорит, что будет переводить ILIKE, кто виноват? Кстати: мой MySQL сортировки utf8_bin. MySQL обслуживается на убунту. Код работает на окнах.
NunchakusHuang
1

голосов
0

ответ
114

Просмотры

Почему Джанго запросы к горячему резервированию идет медленнее, чем запросы освоить?

У меня есть два сервера, работающие Postgres, установка, чтобы быть хозяином / репликатор с помощью горячего резерва. Когда я делаю запросы с помощью Джанго на главном сервере запросы займет примерно половину времени, что одни и те же запросы на дублированном взятии сервера. Сервера идентичны за исключением того, один работают базу данных для чтения / записи подачи WAL файлов, а другие работают только для чтения базы данных тиражирования из файлов WAL. Если я делаю запросы на дублированной сервере освоить запросы решить в два раза быстрее, чем они делают, если я делаю запросы непосредственно в локальную базу данных. Почему это? Я использую маршрутизатор базы данных, как описан в документации Джанго: класс DatabaseRouter: Защита db_for_read (самость, модель, ** подсказки): «» «Считывает идти на локальный хост.„“» Возвращение „по умолчанию“
B.Adler
1

голосов
0

ответ
58

Просмотры

Джанго QuerySet, который всегда возвращает итератор ()

Можно ли определить пользовательские QuerySet, что всегда будет возвращать выход .iterator (), когда он повторяется, сохраняя при этом все остальные функции QuerySet? Обертывание существующего QuerySet будет работать тоже. В настоящее время единственным решения я придумал этот ужасный класс обертки: класс IteratorQuerySet: Защита __init __ (я, Qs): self._qs = QS Защита __iter __ (Я): возвращение self._qs.iterator () Защита __getitem __ (я, * Args, ** kwargs): возвращение self._qs .__ GetItem __ (* Args, ** kwargs) Защита __getattr __ (я, атр): возвращение GetAttr (self._qs, атр) недостатком является то, что это на самом деле не QuerySet , а просто передает все атрибуты и GetItem вызовы СМО. Какие разные углы я мог бы попробовать?
lue3Seba
1

голосов
0

ответ
43

Просмотры

Комплекс аннотация запроса для каждого отдельного

В списке PurchaseOrder Я хотел бы, чтобы отобразить общее количество сгруппированных по каждой отдельной единицы. Я использую следующие модели и функции, но есть база данных хит каждый раз, когда get_quantity_by_unit () называется - для каждого объекта в списке. Класс PurchaseOrder (models.Model): линии = models.ManyToManyField (Product, пустой = True, через = 'PurchaseOrderLine' related_name = '% (класс) s_line') Защиту get_quantity_by_unit (Я): возвращение PurchaseOrderLine.objects.filter (purchase_order = Я) .values ​​( 'unit__abbreviation') аннотирования (сумма = сумма ( 'количество'.)) класс PurchaseOrderLine (models.Model): purchase_order = models.ForeignKey (PurchaseOrder) продукт = models.ForeignKey (продукт) = количество models.DecimalField () единица = модель. ForeignKey (Unit) Может ли это быть достигнуто с Джанго ОРМ? Далее получает общее количество, но не для каждого отдельного блока: запрос = PurchaseOrder.objects.filter (date__gte = CUTOFF_DATE) .annotate (всего = Sum ( 'purchaseorderline_order__quantity')) Следующий бросает ValueError: Prefetch querysets не может использовать значения (). QuerySet = PurchaseOrderLine.objects.values ​​( 'блок'). order_by ( 'блок'). аннотирования (общая сумма = ( 'количество')) запроса = PurchaseOrder.objects.filter (date__gte = CUTOFF_DATE) .prefetch_related (Предвыборка ( 'purchaseorderline_order », QuerySet = QuerySet, to_attr = 'итоговые')) )) Следующий бросает ValueError: Prefetch querysets не может использовать значение (). QuerySet = PurchaseOrderLine.objects.values ​​( 'блок'). order_by ( 'блок'). аннотирования (общая сумма = ( 'количество')) запроса = PurchaseOrder.objects.filter (date__gte = CUTOFF_DATE) .prefetch_related (Предвыборка ( 'purchaseorderline_order », QuerySet = QuerySet, to_attr = 'итоговые')) )) Следующий бросает ValueError: Prefetch querysets не может использовать значение (). QuerySet = PurchaseOrderLine.objects.values ​​( 'блок'). order_by ( 'блок'). аннотирования (общая сумма = ( 'количество')) запроса = PurchaseOrder.objects.filter (date__gte = CUTOFF_DATE) .prefetch_related (Предвыборка ( 'purchaseorderline_order », QuerySet = QuerySet, to_attr = 'итоговые'))
bdoubleu
1

голосов
0

ответ
71

Просмотры

Django ORM исключить не удается

У меня есть некоторые проблемы с моим запросом - с фильтром () это нормально, но с исключением () не работает. Мои модели: класс Dictionary (DateTimeModel): base_word = models.ForeignKey (BaseDictionary, related_name = _ ( 'dict_words')) слово = models.CharField (max_length = 64) версия = models.ForeignKey (Version) класс FrequencyData (DateTimeModel): слово = models.ForeignKey (словарь, related_name = _ ( 'frequency_data')) = кол models.BigIntegerField (нуль = True, пустой = True) Источник = models.ForeignKey (Источник, related_name = _ ( 'frequency_data'), нуль = Правда, пустой = True) пользователь = models.ForeignKey (settings.AUTH_USER_MODEL, related_name = _ ( 'frequency_data')) user_ip_address = models.GenericIPAddressField (нуль = True, пусто = True) date_of_checking = models.DateTimeField (нуль = True, пусто = True) is_checked = модели. BooleanField (по умолчанию = False) И я хочу, чтобы получить какое-то слово из словаря, где частоты которых не от какого-либо пользователя Dictionary.objects.prefetch_related ( 'frequency_data') фильтра (frequency_data__user = 1). [: 100] - OK Dictionary.objects. . prefetch_related ( 'frequency_data') исключить (frequency_data__user = 1) [100] - процессор до 100% и загрузку Без prefetch_related то же самое. Что с исключить? ED словарь дб Tabel - 120k строк FrequencyData - 160k строки EDIT2 PSQL (9.6.6) 100] - процессор до 100% и загрузки Без prefetch_related то же самое. Что с исключить? ED словарь дб Tabel - 120k строк FrequencyData - 160k строки EDIT2 PSQL (9.6.6) 100] - процессор до 100% и загрузки Без prefetch_related то же самое. Что с исключить? ED словарь дб Tabel - 120k строк FrequencyData - 160k строки EDIT2 PSQL (9.6.6)
Mike Br
1

голосов
1

ответ
45

Просмотры

How to add a sortable column from the admin log in Django

В админке Django Мне нужно отобразить, когда объект последнего изменения другого пользователя. Поэтому я хочу использовать встроенный в журнал администратора Django. Я пришел с этим решением: класс MyModel (models.Model): ... @property Защиты admin_last_modified (сам): от django.contrib.admin.models импорта LogEntry из django.contrib.contenttypes.models импорта ContentType попробовать: logentry = формат возврата '' возвращение '{} по {}': LogEntry.objects.filter (object_id = self.pk, content_type_id = ContentType.objects.get_for_model (само .__ class__)) .order_by ( 'action_time') [0], за исключением. (logentry.action_time, logentry.user) и класс администратора: @ admin.register (MyModel) класс MyAdmin (admin.ModelAdmin): list_display = (..., ' admin_last_modified») Недостаток, который представляет собой шоу-стоппер для меня является то, что столбец не сортируется. Для этого, от того, что я собрал, я должен был бы переформулировать собственность как своего рода аннотацию. Но я пытался и не пришел с идеей, как сделать это: класс MyAdmin (admin.ModelAdmin): Защита get_queryset (Я):. QuerySet = супер () get_queryset (запрос) QuerySet = queryset.annotate (admin_last_modified = # ???) возвращение QuerySet Я теперь ищу то, что заменить знаки вопроса с. Как я могу написать аннотацию, который извлекает одну строку информации от другого в основном, не связанной таблицы? d нужно заново сформулировать свойство как своего рода аннотацию. Но я пытался и не пришел с идеей, как сделать это: класс MyAdmin (admin.ModelAdmin): Защита get_queryset (Я):. QuerySet = супер () get_queryset (запрос) QuerySet = queryset.annotate (admin_last_modified = # ???) возвращение QuerySet Я теперь ищу то, что заменить знаки вопроса с. Как я могу написать аннотацию, который извлекает одну строку информации от другого в основном, не связанной таблицы? d нужно заново сформулировать свойство как своего рода аннотацию. Но я пытался и не пришел с идеей, как сделать это: класс MyAdmin (admin.ModelAdmin): Защита get_queryset (Я):. QuerySet = супер () get_queryset (запрос) QuerySet = queryset.annotate (admin_last_modified = # ???) возвращение QuerySet Я теперь ищу то, что заменить знаки вопроса с. Как я могу написать аннотацию, который извлекает одну строку информации от другого в основном, не связанной таблицы? аннотирования (admin_last_modified = # ???) возвращение QuerySet Я сейчас в поисках того, что заменить знаки вопроса с. Как я могу написать аннотацию, который извлекает одну строку информации от другого в основном, не связанной таблицы? аннотирования (admin_last_modified = # ???) возвращение QuerySet Я сейчас в поисках того, что заменить знаки вопроса с. Как я могу написать аннотацию, который извлекает одну строку информации от другого в основном, не связанной таблицы?
Boldewyn
1

голосов
0

ответ
44

Просмотры

Counting overlapping days in django

In my django project, I store user's vacation: class VacationRequest(BaseModel): requested_by = models.ForeignKey(User, related_name='vacation', verbose_name='User') start = models.DateField(__('Start')) end = models.DateField(__('End')) I need a feature to generate report. Reports are generated for selected range of days: class Report(BaseModel): company = models.ForeignKey(Company, related_name='reports') department = models.ForeignKey(Department, verbose_name=__('Department'), related_name='reports', null=True, blank=True) title = models.CharField(verbose_name=__('Title'), null=True, blank=False, max_length=32) start = models.DateField(__('Start')) end = models.DateField(__('End')) csv = models.FileField(__('CSV'), null=True, blank=True, upload_to=report_upload_path, max_length=256, storage=reports_storage) xls = models.FileField(__('XLS'), null=True, blank=True, upload_to=report_upload_path, max_length=256, storage=reports_storage) pdf = models.FileField(__('PDF'), null=True, blank=True, upload_to=report_upload_path, max_length=256, storage=reports_storage) def generate_files(self): headers = ['First name', 'Last name', 'Department', 'vacation days'] department_kwarg = {'userdata__department': self.department} if self.department else {} vacation_filter = models.Q(vacation__status=2, vacation__start__gte=self.start, vacation__end__lte=self.end) # what should I change here? users = User.objects.filter(company=self.company, **department_kwarg).annotate( days_used=models.Sum(models.Case(models.When( vacation_filter, then=models.F('vacation__archive_net_days') ), output_field=models.IntegerField(), default=0)) ).annotate( days_left=models.F('userdata__vacations_days_in_year') - models.F('userdata__used_vacations_days') ).values_list('first_name', 'last_name', 'userdata__department__title', 'days_used', 'days_left') self._generate_csv(users, headers) self._generate_pdf(users, headers) self._generate_xls(users, headers) it works almost fine, however, I want to calculate overlaping days also. For example, when user's vacation is between 10 July and 20 July and in my report I set start date to 11 July it will return 0 days but it should calculate days between. This is because vacation_filter = models.Q(vacation__status=2, vacation__start__gte=self.start, vacation__end__lte=self.end) -- it uses vacation__start__gte - which is not correct, I am not sure what should I use here How can I achieve this?
dease
1

голосов
0

ответ
49

Просмотры

Django ORM Исключительное ОШ

У меня есть проблема с моим запросом Django ORM. Этот запрос: Ticket.objects.filter (Q (change_personal_data__personal_data__number = число, change_personal_data__is_active = True)) производит следующий запрос: SELECT "tickets_ticket" "ID" FROM "tickets_ticket" Inner Join "tickets_changepersonaldata" ON "(" tickets_ticket "идентификатор.. "= "tickets_changepersonaldata"." TICKET_ID ") INNER JOIN "tickets_personal" ВКЛ (" tickets_changepersonaldata». "personal_data_id"= "tickets_personal". "ID"), где ( "tickets_personal". "число"= 'XXXXXXXX' И "tickets_changepersonaldata" "is_active" = True). и это одно: Ticket.objects.filter (B (Q (personal_data__number = число) & ~ Q (change_personal_data__is_active = True))) производит следующим образом: SELECT "tickets_ticket" "ID" FROM "tickets_ticket" INNER JOIN "tickets_personal" ВКЛ ( "tickets_ticket" "personal_data_id" = "tickets_personal" "ID"), где (»... «. "tickets_personal число"= 'XXXXXXXX' И НЕ ( "tickets_ticket идентификатор "В (ВЫБРАТЬ U1. "TICKET_ID" КАК Col1 ОТ "tickets_changepersonaldata" U1 где U1. "is_active"= True)".")); но когда я объединить их (с условием OR) в течение 1 QuerySet Ticket.objects.filter (Q (Q (change_personal_data__personal_data__number = число, change_personal_data__is_active = True) | Q (Q (personal_data__number = числа) & "Число" = 'XXXXXXXX' И "tickets_changepersonaldata". "Is_active" = True) ИЛИ (Т4. "Номер" = 'XXXXXXXX' И НЕ ( "tickets_ticket". "Идентификатор" IN (SELECT U1. "TICKET_ID" AS Col1 ОТ "tickets_changepersonaldata" U1 WHERE (U1 "is_active" = True.)))); Как добиться этого? Дифф в последней строке:. И U1 «ID» = ( «tickets_changepersonaldata» «идентификатор».) Я хочу, чтобы избавиться от него. Как добиться этого? Дифф в последней строке:. И U1 «ID» = ( «tickets_changepersonaldata» «идентификатор».) Я хочу, чтобы избавиться от него. Как добиться этого? Дифф в последней строке:. И U1 «ID» = ( «tickets_changepersonaldata» «идентификатор».) Я хочу, чтобы избавиться от него.
Kisiel
1

голосов
1

ответ
34

Просмотры

Django complex query through builder

Я не был в состоянии сделать сложный запрос с использованием ОРМ в течение некоторого времени. Я знаю, что это возможно, так что я прощу помощи. Класс игры (models.Model): ни один класс независимо от конкуренции (models.Model): игра = models.ForeignKey (к 'game.Game' =, verbose_name = _ ( 'игра'), related_name = 'соревнования', on_delete = модели .PROTECT) класс пользователя (models.Mode): ни один класс независимо от баланса (models.Model): пользователь = models.OneToOneField (к = пользователь, on_delete = models.CASCADE, primary_key = True) класс BalanceTransaction (models.Model): ВИДЫ = ((TYPE_COMMISSION, _ ( 'комиссия'))} конкуренция = models.ForeignKey (к 'competition.Competition' =, verbose_name = _ ( 'конкуренция'), related_name = 'операции', on_delete = models.CASCADE, нуль = True, пустой = True) баланс = модель.
Andrei Tupic
1

голосов
1

ответ
34

Просмотры

Регистрация несвязанных модели и удалить дубликаты из QuerySet

Мне очень нужна помощь здесь. У меня есть две таблицы ниже. Как вы можете видеть, что они полностью независимы (Нет отношений между ними). класс людей (models.Model): first_name = models.CharField (max_length = 30) last_name = models.CharField (max_length = 35) phone_number = models.CharField (нуль = True, пусто = True, max_length = 15), созданных = моделей. DateTimeField (auto_now = False, auto_now_add = True) класс Blacklist (models.Model): first_name = models.CharField (max_length = 30) last_name = models.CharField (max_length = 35) phone_number = models.CharField (пустой = True, max_length = 15) Как я продолжу достигнуть ниже: * у меня есть список телефонных номеров из таблицы «черного списка». Я хочу, чтобы иметь возможность проверить, если «phone_number (s)» поле из таблицы «Люди» идентична любой «PHONE_NUMBER» в «черный список». Если она совпадает, удаление дубликатов «PHONE_NUMBER» из таблицы «Люди». Я провел несколько дней, и не нашел правильный способ сделать это. Я использую базу данных PostgreSQL. Любая помощь приветствуется.
Curtis Banks
1

голосов
0

ответ
41

Просмотры

Postgres запрос Джанго ОРМ

Я хочу сделать этот сильфон запрос в Джанго ОРМ, я пытался сделать с примером QuerySet и он не работает, всегда возвращает ошибку, я хочу знать, если это возможно, чтобы решить эту проблему. Я думаю, что проблема migth быть GROUP BY, и Django ORM doens't сделать GROUP BY, но это только предположение. Ошибка: Traceback (самый последний вызов последнего): Файл "C: \ Python35 \ Lib \ сайт-пакеты \ Джанго \ ядро ​​\ обработчики \ exception.py", строка 34, во внутренней ответ = get_response (запрос) Файл «C: \ Python35 \ Lib \ сайт-пакеты \ Джанго \ ядро ​​\ обработчики \ base.py "строка 126, в ответ _get_response = self.process_exception_by_middleware (е, запрос) Файл" C: \ Python35 \ Lib \ сайт-пакеты \ Джанго \ ядро \ обработчики \ base.py "строка 124, в ответ _get_response = wrapped_callback (запрос, * callback_args, ** callback_kwargs) Файл" C:
Daniel Pereira
1

голосов
1

ответ
21

Просмотры

Ненужные присоединиться к Джанго QuerySet модели со многими ко многим поля и промежуточной таблицы

Когда я пытаюсь получить все объекты моей модели FabricCategory, она возвращает некоторые дубликаты. Я нашел ненужный LEFT OUTER JOIN в SQL запросе: питон manage.py shell_plus --print-SQL >>> FabricCategory.objects.all () ВЫБОР `product_fabriccategory`.`id`,` product_fabriccategory`.`price_impact`, ` product_fabriccategory`.`code`, `` product_fabriccategory`.`active` ОТ product_fabriccategory` LEFT OUTER JOIN `product_fabriccategoryfabric` ON (` `product_fabriccategory`.`id` = product_fabriccategoryfabric`.`fabriccategory_id`) ORDER BY` product_fabriccategoryfabric`.`position `ASC,` product_fabriccategoryfabric`.`fabriccategory_id` ASC LIMIT 21 Вот мои настройки: класс FabricCategoryFabric (models.Model): fabriccategory = models.ForeignKey ( 'FabricCategory', related_name =» price_impact) класс Ткань (models.Model): fabric_category = models.ForeignKey (FabricCategory, нуль = True, on_delete = models.DO_NOTHING) ссылка = models.CharField (уникальный = True, max_length = 50) содержание = models.TextField (пусто = True) миниатюры = models.CharField (max_length = 50, пробел = True) = активный models.BooleanField (по умолчанию = True) Защита __str __ (Я): возвращение класса self.reference Мета: заказ = [ 'fabric_fabriccategory'] ли кто-нибудь встреча и решить эту проблему уже? Я использую: Django 2.1.1 mysqlclient 1.3.13 Database Engine django.db.backends.mysql price_impact) класс Ткань (models.Model): fabric_category = models.ForeignKey (FabricCategory, нуль = True, on_delete = models.DO_NOTHING) ссылка = models.CharField (уникальный = True, max_length = 50) содержание = models.TextField (пусто = True) миниатюры = models.CharField (max_length = 50, пробел = True) = активный models.BooleanField (по умолчанию = True) Защита __str __ (Я): возвращение класса self.reference Мета: заказ = [ 'fabric_fabriccategory'] ли кто-нибудь встреча и решить эту проблему уже? Я использую: Django 2.1.1 mysqlclient 1.3.13 Database Engine django.db.backends.mysql TextField (пустые = True) миниатюры = models.CharField (max_length = 50, пробел = True) = активный models.BooleanField (по умолчанию = True) Защита __str __ (Я): возвращение класса self.reference Мета: заказ = [ 'fabric_fabriccategory'] Возможно, кто-нибудь столкнуться и решить эту проблему уже? Я использую: Django 2.1.1 mysqlclient 1.3.13 Database Engine django.db.backends.mysql TextField (пустые = True) миниатюры = models.CharField (max_length = 50, пробел = True) = активный models.BooleanField (по умолчанию = True) Защита __str __ (Я): возвращение класса self.reference Мета: заказ = [ 'fabric_fabriccategory'] Возможно, кто-нибудь столкнуться и решить эту проблему уже? Я использую: Django 2.1.1 mysqlclient 1.3.13 Database Engine django.db.backends.mysql
s.weszler
1

голосов
1

ответ
13

Просмотры

Джанго доступа, связанные состояния модели в пользовательских менеджеров

Я использую model_utils библиотеку в Django. У меня есть две модели, как показано ниже класса Book (TimeStampedModel): STATUS_CHOICES = Выбор ((0, 'общественность', _ ( 'общественность')), (1, 'частный', _ ( 'частный')),) статус = models.IntegerField (verbose_name = _ ( 'статус'), выбор = STATUS_CHOICES, по умолчанию = STATUS_CHOICES.public, db_index = True,) класс Page (MPTTModel, AbstractPage): STATUS_CHOICES = Выбор ((0, 'проект', _ ( 'проект')), (1, 'общественность', _ ( 'общественность')), (2, 'частный', _ ( 'частный'))) состояние = models.IntegerField (verbose_name = _ ( "статус «), выбор = STATUS_CHOICES, по умолчанию = STATUS_CHOICES.public, db_index = True, ) Книга = models.ForeignKey ( 'book.Book', verbose_name = _ ( 'книга'), related_name = 'страница', db_index = True, on_delete = models.CASCADE,) Обе книга и страница модель имеет поле состояния. У меня есть два пользовательских классов набор запросов в managers.py. Класс BookQuerySet (models.QuerySet): Защита общественности (сам): возвращение self.filter (статус = self.model.STATUS_CHOICES.public) Класс PageQuerySet (models.QuerySet): Защита общественности (сам): возвращение self.filter (book__status = 0, состояние = self.model.STATUS_CHOICES.public) Как было показано выше, book__status = 0 этот код конечно, работает, но я немного разочарован, потому что я хотел бы использовать код, подобный self.book.model.STATUS_CHOICES.public. Пожалуйста, скажите мне, как получить доступ к соответствующему свойству модели объекта. Если я импортировать из .models импортировать книги, это приведет к «круговому импорту». Спасибо.
nasiajai
1

голосов
2

ответ
289

Просмотры

Совокупные данные, используя ОРМ

Django / Python нуб здесь! Вот мои модели: класс Match (models.Model): дата = models.DateTimeField) суд = models.ForeignKey (суд) игроки (= models.ManyToManyField (Пользователь, через = 'Участник') класс Участник (models.Model): матч = models.ForeignKey (Match) = идентификатор models.ForeignKey (Пользователь) games_won = models.IntegerField () класса Court (models.Model): LOCATION_NAME = models.CharField (max_length = 100) число = models.IntegerField () Мое мнение в настоящее время: индекс четкости (запрос): matches_list = Participant.objects.all () возвращает render_to_response ( 'кабачки / base_matches.html', { 'matches_list': matches_list}, context_instance = RequestContext (запрос)) вернуть HttpResponse (выход) Мои данные в базе данных выглядит следующим образом: [Match_id] [дата] [player1] [player2] [p1wins] [p2wins] [game_winner] [court_location_name] [court_number] 1 01-01-2011 микрофон 6 4 Крисом микрофон Королева 5 2 01.02.2011 боб Джо 3 4 джо Queen 6 3 01.03.2011 Jessie джон 5 5 ничья Queen 2 Что означает, что нужно группе match_id. Я пытался сделать что-то вроде следующего в моем шаблоне, но это только агрегирует match_id, дату и время. Мне нужно, чтобы иметь возможность форматировать остальные данные. В структуре таблицы как preposed прямо перед. {% Перегруппировать matches_list на матч, как matches_group%} {% для события в matches_group%} {{event.grouper}} {% для элемента в blah.list%} {{элемент. дата}} {% ENDFOR%} {% ENDFOR%} Любые советы здесь? UPDATE:. Я тестировал с matches_list = Participant.objects.values ​​( «матч») аннотирования (всего = Count ( «матч»)), и я считаю, что это то, что заставляет меня агрегацию. Однако я не знаю, как вытащить нужные поля из него в шаблоне. Например: {% совпадений в matches_list%} {{matches.match.id}} {% ENDFOR%} Это дает мне 3 записи (я могу видеть, 3 «с), но ничто не распечатаны. Не уверен, что мне нужно сделать для {{}} matches.match.id Например: {% совпадений в matches_list%} {{matches.match.id}} {% ENDFOR%} Это дает мне 3 записи (я могу видеть, 3 «с), но ничто не распечатаны. Не уверен, что мне нужно сделать для {{}} matches.match.id Например: {% совпадений в matches_list%} {{matches.match.id}} {% ENDFOR%} Это дает мне 3 записи (я могу видеть, 3 «с), но ничто не распечатаны. Не уверен, что мне нужно сделать для {{}} matches.match.id
Besto
1

голосов
1

ответ
249

Просмотры

Джанго ManyToMany сомнения

У меня есть эти модели: класс Комментарий (models.Model): Текст = models.TextField (max_length = 300) Автор = models.ForeignKey (Пользователь) Отметка времени = models.DateTimeField (auto_now_add = True) класс UserProfile (models.Model): пользователь = models.ForeignKey (Пользователь, уникальный = True) комментарии = models.ManyToManyField (Комментарий) класс продукта (models.Model): название = models.CharField (max_length = 30) комментарии = models.ManyToManyField (Комментарий) Я знаю, что есть Джанго. contrib.comments, но теперь я пишу свою собственную систему комментариев. Либо UserProfile и объект продукта может иметь список комментариев. Является ли это логически это исправить? Мои сомнения: а ManyToManyField означает: объект А имеет множество объектов, B, поэтому объект B имеет множество объектов А или множество объектов А есть много объектов B? Какое это правильное предложение? Потому что, если это первый один, мои модели макет это неправильно, потому что (к примеру) Продукт имеет много комментариев, но комментарий не так много продуктов. Вы можете уточнить мои сомнения?
Fred Collins
1

голосов
1

ответ
1.2k

Просмотры

Джанго. Многие-ко-многим поле для формы, но не для модели

У меня есть БД, который должен иметь одно поле с типом многие-ко-многим, но это не так, и я не могу это изменить. Например, у меня есть список студентов и список предметов. Тема должна быть много-ко-многим в области студентов таблицы, но, как я сказал, что это не так. таблица Студентов не имеет это поле вообще. Но есть еще одна таблица студентов-предметы, которые содержат subject_id-student_id элементы. Как я могу встроить в студента сформировать какой-то предметной области, которые могли бы изменить данные студентов-субъектов при сохранении студента в БД? Проблема заключается в том, что я не могу изменить структуру БД, так нужно сделать только с помощью Django.
sunprophit
1

голосов
1

ответ
276

Просмотры

Джанго оптимизация запросов к базе данных

= 1 ПРЕДЕЛ 21; арг = (1,) [,,] (0.000) ВЫБОР "testapp_visitor" "идентификатор", "testapp_visitor" "название" ОТ "testapp_visitor"..; арг = () (0,000) ВЫБОР "testapp_visitor". "ID", "testapp_visitor". "название" ОТ "testapp_visitor" INNER JOIN "testapp_visitor_destinations" ВКЛ ( "testapp_visitor". "ID" = "testapp_visitor_destinations". "visitor_id") где "testapp_visitor_destinations" "destination_id" = 1. арг = (1,) завершил загрузку начальных вариантов редактировать объект назначения я сослаться на это соответствующая сторона ManyToMany поля на объекте в профиле. Если моя форма редактирования самого объекта Visitor, то Django будет автоматически обрабатывать ManyToMany поля. Но сделать это в форме модели для назначения мне нужно добавить несколько поля выбора для посетителей и настроить метод __init__, чтобы загрузить выбор и начальные выборы для него. Вопрос, однако, о том, как справиться с QuerySet, и таинственный второй SQL, чтобы загрузить значения manytomany, которые я также могу видеть из оболочки: >>> от testapp.forms импорта DestinationForm >>> из testapp.models импорта назначения, посетителей >>> приемник = Destination.objects.get (рк = 1) (0.001) SELECT "testapp_destination" "ID", "testapp_destination" "цели" FROM "testapp_destination", где "testapp_destination" "ID" = 1...; арг = (1,) >>> destinationForm = DestinationForm (экземпляр = точки назначения) загружаются начальные варианты (0,000) SELECT "testapp_visitor". "Идентификатор", "testapp_visitor". "Название" ОТ "testapp_visitor" INNER JOIN "testapp_visitor_destinations" ВКЛ ( "testap p_visitor". "ID" = "testapp_visitor_destinations". "Visitor_id"), где "testapp_visitor_destinations". "Destination_id" = 1 LIMIT 21; арг = (1,) [,,] (0.000) ВЫБОР "testapp_visitor" "идентификатор", "testapp_visitor" "название" ОТ "testapp_visitor"..; арг = () (0,000) ВЫБОР "testapp_visitor". "ID", "testapp_visitor". "название" ОТ "testapp_visitor" INNER JOIN "testapp_visitor_destinations" ВКЛ ( "testap p_visitor". "ID" = "testapp_visitor_destinations". "visitor_id" ) ГДЕ "
xuloChavez
1

голосов
1

ответ
3k

Просмотры

django.db.utils.IntegrityError: (1062, «Дублировать запись '22 -add_» для ключа 'content_type_id'»)

Я использую Джанго нескольких концепций DB маршрутизатора, имеющие несколько сайтов с разными децибелами. Базовый пользователь базы данных будет войти в систему со всеми остальными суб-сайтов. Когда я пытаюсь SyncDB в базе сайта его работали должным образом (в любое время), но при попытке SyncDB с другими сайтами работают первый раз только, если мы попробуем в следующий раз на подопечном он бросает integiry ошибки, как показано ниже django.db.utils.IntegrityError: ( 1062, «Дублировать запись '22 -add_somesame» для ключа „content_type_id“») После того, как я удалил несколько параметров маршрутизатора БД в том, что проект означает SyncDB работает должным образом (в любое время). Так это относится к нескольким БД маршрутизатора? или еще что? Пожалуйста, кто-нибудь сообщить об этом, спасибо.
keshavv
1

голосов
1

ответ
1.7k

Просмотры

Заменить Django модели объекта с другим

Я работаю над приложением, где мы должны рассмотреть изменения модели, прежде чем принять их. Для этого, когда пользователя редактирует один из модели компании объектов в приложении фронтэнде, начальные данные формы заполняются данными из исходного объекта, а затем сохраняются в новый объект, который помечен с помощью поля origin_company (который является внешним ключом к предыдущей версии объекта). Поэтому в основном, когда кто-то редактирует компанию, новая, неактивная компания создана. Для того, чтобы применить изменения, я хочу, чтобы скопировать все данные с измененной компании в оригинальной компании. (Я делаю это с помощью пользовательских действий Джанго-администратора.) Самый простой способ, вероятно, будет начать транзакцию, удалите исходную компанию и изменить первичный ключ измененной компании, чтобы соответствовать оригинальной компании. Но, делая это, измененная компания не обновляла, он копируется. И родственные записи базы данных (ФКС) не обновляются либо. Есть простой способ, чтобы скопировать или переместить все данные (в том числе отношений FK) из одного экземпляра модели к другому? Или весь мой путь решения этой проблемы перепутались? Вот определение модели: класс компании (models.Model): company_name = models.CharField (max_length = 150) ... origin_company = models.ForeignKey ( 'я', related_name = u'CompanyEdits', NULL = True, пустой = True , не по умолчанию = None)
Danilo Bargen
1

голосов
1

ответ
1.4k

Просмотры

Джанго обратного prefetch_related из ForeignKey вернуть массив

Продолжая из этого примера, я хотел бы выполнить обратный запрос, как это: результат = Topping.objects.all () prefetch_related ( «pizza_set») Я хотел бы ожидать, что это возвращает массив массивов.. Внутри каждого отдельного массива, обратный поиск вернуться к пицце сам должен быть массивом. Результат = [ 'имя': 'Ананас', 'pizza_set': [{ 'Имя': 'Гавайский' ... ...}]] Как есть мой запрос не следует назад через pizza_set. Любые идеи, что я делаю не так?
snakesNbronies
1

голосов
1

ответ
708

Просмотры

Как создать уникальный объект для модели Django с многим ко многим поля?

Я хочу, чтобы создать уникальный объект (Он не может существовать еще один экземпляр с теми же полями). Этот объект имеет отношения многие ко многим, который отвечает сделать его уникальным. Объект представляет собой поток сообщений, и эта нить разговора между двумя пользователями (на самом деле это может быть между большим количеством пользователей, потому что я использую многие ко многим поля, но я заинтересован только между двумя пользователями). Класс Thread (models.Model): пользователи = models.ManyToManyField (Пользователь, нуль = True, пустой = True, related_name = 'нити') класс Mensaje (models.Model): нить = models.ForeignKey (Thread, related_name = 'mensajes «) #messages Когда пользователь отправить сообщение другому пользователю, если поток не существует, она будет создана, и если она существует сообщения будут связаны с этим потоком. Я пытаюсь что-то вроде этого: нить = Thread. objects.get_or_create (пользователи = [user1, user2]) Но у меня есть следующее исключение: Exception Значение: Int () аргумент должен быть строкой или число, а не «список» Любые предложения? Благодарю.
PEREYO
1

голосов
2

ответ
2.6k

Просмотры

Эффективная альтернатива на фильтре Django имущества

Я знаю, что фильтрация по свойству не представляется возможным с Django, так как фильтрация выполняется на уровне базы данных и свойства живут в коде Python. Тем не менее, у меня есть следующий сценарий: В одной руке у меня есть модель RegisteredUser с другой стороны подписки. Пользователь может иметь несколько подписок, подписка от одного пользователя, и пользователь имеет активные подписки один или ни одного. Для реализации этого, у меня есть внешний ключ от подписки на RegisteredUser и подписка собственности на RegisteredUser, что указует на активные один (последние созданные подписки для этого пользователя) или ничего, если он не имеет какую-либо подписки. Какой бы наиболее ЭФФЕКТИВНЫЙ способ фильтровать пользователь, которые имеют подписку на «платину», «золото», «серебро» ...? Я мог бы сделать «получать все подписки» а затем перебрать их, чтобы проверить каждый из них на матч. Но это было бы очень дорого, и если я должен сделать тот же процесс для каждого вида типа подписки, то стоимость будет s * и (где s это количество различных подписок и и это число пользователей). Любая помощь будет оценена. Заранее спасибо! UPDATE: Когда я впервые объяснил проблему, я не включил все модели, связанные с упрощать Litte. Но, как вы меня спрашиваете, для моделей и некоторые из вас не поняли меня (может быть, я не был достаточно ясно) здесь у вас есть код. Я упростил модель и раздел код, не важно. Что я здесь? RegisteredUser может иметь много подписок (потому что он может изменить его столько раз, сколько он хочет), и подписка от только одного пользователя. Пользователь имеет только один текущую подписку, который является последней один и возвращается подпиской собственности. Подписка прилагается с членством и это модель, чьи пули может быть: платина, золото, серебро и т.д. Что мне нужно сделать? Мне нужно для поиска Content автор которого имеет определенный вид членства. Если подход свойство работал, я бы сделал это так: Content.objects.filter (author__id__in = RegisteredUser.objects.filter (subscription__membership__slug = «золото»)) Но я не могу этого сделать, потому что свойства не могут быть использованы при фильтрации! Я думал, что я мог бы решить эту проблему, преобразующую «виртуальное» отношение созданного имущества в реальный ForeignKey, но это может вызвать побочные эффекты, как я должен обновить его вручную каждый раз, когда пользователь изменяет свою подписку и теперь это автоматически! Есть идеи получше? Спасибо!
Caumons
1

голосов
1

ответ
817

Просмотры

Django ORM не может решить ключевое слово для соответствующего поля для агрегата, когда модель используется более чем в одном приложении

В Django 1.5 У меня 3 приложения: общий, app1, app2, в котором у меня есть следующая (упрощенный) модель: # общего / models.py класса ApiUser (models.Model): имя пользователь = models.CharField (max_length = 255) канал = models.CharField (max_length = 20) # app1 / models.py класс Place (models.Model): название = models.CharField (max_length = 255) CREATED_BY = models.ForeignKey ( 'common.ApiUser', NULL = True, related_name = "% (app_label) s_places") # app2 / models.py класс Tag (models.Model): имя = models.CharField (max_length = 255) пользователь = models.ForeignKey ( 'common.ApiUser', NULL = True, related_name = "% (app_label) s_tags") app1 в списке перед app2 в INSTALLED_APPS. Когда я пытаюсь создать следующий QuerySet:. QS = ApiUser.objects.filter (канал = 'app1') аннотирования (Count ( 'app1_places')) Я вернусь: Не удается разрешить ключевое слово «app1_places» в поле. Варианты: app2_tags, канал, имя пользователя Где список выбора при условии, не включает в себя «app1_places», но содержит «app2_tags». Однако, если я пытаюсь ссылаться app1_places на экземпляр модели я не получаю сообщение об ошибке; она отлично работает: >>> и = ApiUser.objects.get (рк = 23) >>> u.app1_places.all () [] аннотирования с app2_tags тоже работает: QS = ApiUser.objects.filter (канал = 'app2' ) .annotate (Count ( «app2_tags»)) является ли это ошибка в Джанго или есть что-то я делаю неправильно настройки этих полей. Редактирование: вот трассировки стека: Traceback (самый последний вызов последнего): Файл «», строка 1, в файле «/home/vagrant/.virtualenvs/thorium/lib/python2.6/site-packages/django/db/ модели / query.py», строка 795, в аннотирование is_summary = False) Файл "/home/vagrant/.virtualenvs/thorium/lib/python2.6/site-packages/django/db/models/sql/query.py", строка 1019, в add_aggregate field_list, выбирает, self.get_initial_alias (), False) Файл "/home/vagrant/.virtualenvs/thorium/lib/python2.6/site-packages/django/db/models/sql/query.py", строка 1337, в setup_joins «Выбор являются:% S "% (имя,",».join (имена))) FieldError: не может решить ключевое слово 'app1_places' в поле. Варианты: app2_tags, канал, имя пользователя Примечание: некоторые модели App1 используют GeoDjango GeoManager (включая места), но есть и модели в App1, которые не используют geomanager и имеют внешние ключи, которые также не работают с аннотирования.
rojoca
1

голосов
2

ответ
686

Просмотры

Как выбрать пользователей и групп в одном запросе в Джанго?

Мне нужно что-то подобное для выбора пользователей и групп в одном запросе в Джанго. Пользователь = User.objects.select_related ( «группы»). получить (ID = user_id) Я не хочу, чтобы использовать необработанные запросы для этого. Существует еще один способ сделать это, что делает два запроса: пользователь = User.objects.get (ID = user_id) группы = user.groups
Anuj
1

голосов
1

ответ
763

Просмотры

Как проверить commit_manually внутри Django UnitTests

Как вы проверяете Django код, который использует commit_manually () из UnitTest? У меня есть давно работает метод, который удаляет большое количество записей, достаточно, чтобы он не может сохранить все эти изменения в одной транзакции, не расходуя всю системную память. Так что я оберните его в @commit_manually и периодически вызывать фиксации (). Однако, в Django 1.6, все UnitTests теперь завернутые в transaction.atomic (), так что если я пытаюсь делать какие-либо ручной совершает, я получаю ошибку: django.db.transaction.TransactionManagementError: Это запрещено, когда «атомный» блок активно. Что обходным для этого?
Cerin
1

голосов
1

ответ
648

Просмотры

Хранение учетных данных DriveAPI с использованием oauth2client.django_orm.Storage-класса

Я хочу, чтобы сохранить учетные данные клиента, полученные от Drive API. Я попытался следующий кодом ниже, это хорошо работает для хранения учетных данных, но когда я доступ к данным в целях загрузки это не возвращая удостоверение views.py из oauth2client.django_orm импорта хранения из drv_app.models импорта CredentialsModel #authorization клиента по пользователь Защита authorize_application (запрос): #setting поток, чтобы получить разрешение и поток коды = OAuth2WebServerFlow (CLIENT_ID, client_secret, OAUTH_SCOPE, redirect_uri, ACCESS_TYPE) authorize_url = flow.step1_get_authorize_url (код) = request.GET.get ( 'код', ' «), если код: #setting step2 потока в EXCHAGE код доступа маркера верительных = потока. удостоверение ForeignKey (primary_key = True Пользователь) = CredentialsField () Что я делаю неправильно? Просьба предложить необходимые улучшения.
Vishnu Kant
1

голосов
2

ответ
1.4k

Просмотры

Джанго автообъединение, Как преобразовать этот запрос в ОРМ запрос

Как я могу преобразовать этот запрос Джанго ORM запроса. выберите T.node_id, ХТ, статус, данные (выбрать идентификатор, Макс (health_time), как ХТ, node_id из remote_sense_nodehealth группы по node_id) в качестве Т присоединиться к remote_sense_nodehealth на remote_sense_nodehealth.health_time = T.ht и remote_sense_nodehealth.node_id = T.node_id На самом деле я хочу, чтобы получить все последние значения на основе другого значения столбца. Например Моя таблица похожа - c1 | с2 | c3 - - - - - - - х | 1 утра | d1 х | 2 утра | d2 х | 3 утра | d3 у | 1 утра | d4 у | 2 утра | d5 {Желаемый результат: [{с1: х, с2: 3 утра, с3: d3}, {с1: у, с2: 2AM, с3: d5}]
xrage
1

голосов
1

ответ
3.7k

Просмотры

Джанго: как фильтр на дополнительной колонке?

У меня есть запрос, как: Foo.objects.extra (выберите = { «extra_column»: 'SELECT ...}), и я хочу, чтобы фильтровать по extra_column, но я не могу получить этот псевдоним на фильтре. Я имею в виду использование Аннотировать (), но я не знаю, Аннотировать () можно, используя на selectclause, все учебник на SUM и т.д. Я также попытался предложения HAVING, но мне кажется, что Django не поддерживает HAVING на дополнительной ( ). Любые предложения будут очень признательны. Edit: Django 1.6, MySQL я запрос на каком-то сложном состоянии, так что я должен с помощью дополнительной () для записи подзапрос. Но я не могу с помощью фильтра (), чтобы получить доступ к псевдониму подзапроса. Если бы я обратился к аннотирования (), которые могут быть доступны в более позднем фильтре (), но кажется, что он работает только с SUM, MAX, MIN, AVG, таким образом, я не могу использовать его на моем обычае ВЫБРАТЬ подзапрос. Я прочитал подобный вопрос здесь: Django ORM: Фильтр по дополнительному атрибуту. Он сказал, что, когда запрос на псевдоним на MySQL, вам нужно использовать предложения HAVING. Я не знаю, если этот вопрос также на других движках SQL, как PostgreSQL, или на более высокую версию Django. Может быть, нет встроенного решения по этому вопросу в Django1.6 с MySQL?
Fred Wu
1

голосов
2

ответ
214

Просмотры

Джанго: Использование select_related () и время работы Производительность

Я новичок в Django и базы данных, так что я пытаюсь получить некоторое представление о производительности. В частности, я хочу понять, если select_related () работает так, как я думаю, что это делает. Вот упрощенная версия моей модели: класс пользователя (models.Model): короткая = models.CharField (max_length = 255) Имя = models.CharField (max_length = 255) Класс Комментарий (models.Model): название = models.CharField (max_length = 255) содержание = models.TextField () = короткий models.ForeignKey (Пользователь) в моем шаблоне, я должен показать короткое имя пользователя рядом с заголовком комментария. Мой размер тестовой базы данных имеет 1000 пользователей и 19000 комментариев. Во-первых, я был получение списка следующим образом:. Cmt_list = Comment.objects.all () order_by ( «название») Мой шаблон был доступ короткий внешнего ключа, который вызывает дополнительные обращения к базе данных. Получение всех данных занял ~ 30s. Что было довольно ужасно. Я знал, что это намного быстрее, сырой SQL, и я не мог понять, как сделать это с помощью Django ORM. Таким образом, я использовал интерфейс низкого уровня: от подключения импорта django.db курсора = connection.cursor () cursor.execute ( "SELECT app_comment.title, app_user.short \ FROM app_comment, APP_USER \ WHERE app_comment.short_id = app_user.id \ ORDER BY app_comment.title») raw_list = cursor.fetchall () cmt_list = [{ "название": запись [0], "короткий": запись [1]} для входа в raw_list] Получение всех данных принял ~ 233ms. Это то, что я ожидал! После прочтения нескольких докторов, я обнаружил select_related () функцию в Django. Итак, я попытался это: cmt_list = Комментарий. objects.all (). select_related ( 'short__short'). order_by ( 'название') Получение всех данных занял ~ 1.3s. Гораздо лучше, чем оригинал, но все еще довольно медленно по сравнению с необработанными запросами SQL. Вопрос: Что я делаю не так в том, что я использую select_related (отдельно) / Django ORM? Я понимаю, что ОРМ добавит некоторые накладные расходы, но 1.3s против 233ms кажется чрезмерной. Или, как это ожидалось, и мне просто нужно, чтобы получить над ним? Как бы я вылепить запрос с использованием ORM, который был бы эквивалентен необработанным SQL запроса я сделал? Учитывая то, что я понимаю, о select_related (), мой сырой SQL-запрос, и мой Django одна должна быть примерно эквивалентны. (Запрос Джанго будет хватать больше контента, но и для моих тестовых данных не было бы много дополнительных извлекаться.) ) Получение всех данных занял ~ 1.3s. Гораздо лучше, чем оригинал, но все еще довольно медленно по сравнению с необработанными запросами SQL. Вопрос: Что я делаю не так в том, что я использую select_related (отдельно) / Django ORM? Я понимаю, что ОРМ добавит некоторые накладные расходы, но 1.3s против 233ms кажется чрезмерной. Или, как это ожидалось, и мне просто нужно, чтобы получить над ним? Как бы я вылепить запрос с использованием ORM, который был бы эквивалентен необработанным SQL запроса я сделал? Учитывая то, что я понимаю, о select_related (), мой сырой SQL-запрос, и мой Django одна должна быть примерно эквивалентны. (Запрос Джанго будет хватать больше контента, но и для моих тестовых данных не было бы много дополнительных извлекаться.) ) Получение всех данных занял ~ 1.3s. Гораздо лучше, чем оригинал, но все еще довольно медленно по сравнению с необработанными запросами SQL. Вопрос: Что я делаю не так в том, что я использую select_related (отдельно) / Django ORM? Я понимаю, что ОРМ добавит некоторые накладные расходы, но 1.3s против 233ms кажется чрезмерной. Или, как это ожидалось, и мне просто нужно, чтобы получить над ним? Как бы я вылепить запрос с использованием ORM, который был бы эквивалентен необработанным SQL запроса я сделал? Учитывая то, что я понимаю, о select_related (), мой сырой SQL-запрос, и мой Django одна должна быть примерно эквивалентны. (Запрос Джанго будет хватать больше контента, но и для моих тестовых данных не было бы много дополнительных извлекаться.) Вопрос: Что я делаю не так в том, что я использую select_related (отдельно) / Django ORM? Я понимаю, что ОРМ добавит некоторые накладные расходы, но 1.3s против 233ms кажется чрезмерной. Или, как это ожидалось, и мне просто нужно, чтобы получить над ним? Как бы я вылепить запрос с использованием ORM, который был бы эквивалентен необработанным SQL запроса я сделал? Учитывая то, что я понимаю, о select_related (), мой сырой SQL-запрос, и мой Django одна должна быть примерно эквивалентны. (Запрос Джанго будет хватать больше контента, но и для моих тестовых данных не было бы много дополнительных извлекаться.) Вопрос: Что я делаю не так в том, что я использую select_related (отдельно) / Django ORM? Я понимаю, что ОРМ добавит некоторые накладные расходы, но 1.3s против 233ms кажется чрезмерной. Или, как это ожидалось, и мне просто нужно, чтобы получить над ним? Как бы я вылепить запрос с использованием ORM, который был бы эквивалентен необработанным SQL запроса я сделал? Учитывая то, что я понимаю, о select_related (), мой сырой SQL-запрос, и мой Django одна должна быть примерно эквивалентны. (Запрос Джанго будет хватать больше контента, но и для моих тестовых данных не было бы много дополнительных извлекаться.) и мне просто нужно, чтобы получить над ним? Как бы я вылепить запрос с использованием ORM, который был бы эквивалентен необработанным SQL запроса я сделал? Учитывая то, что я понимаю, о select_related (), мой сырой SQL-запрос, и мой Django одна должна быть примерно эквивалентны. (Запрос Джанго будет хватать больше контента, но и для моих тестовых данных не было бы много дополнительных извлекаться.) и мне просто нужно, чтобы получить над ним? Как бы я вылепить запрос с использованием ORM, который был бы эквивалентен необработанным SQL запроса я сделал? Учитывая то, что я понимаю, о select_related (), мой сырой SQL-запрос, и мой Django одна должна быть примерно эквивалентны. (Запрос Джанго будет хватать больше контента, но и для моих тестовых данных не было бы много дополнительных извлекаться.)
hoadlck
1

голосов
2

ответ
47

Просмотры

Джанго выбора счета

Я довольно новый для Django, и я хочу, чтобы получить общее количество клиентов, пользователь имеет (мои пользователи будут продавать что-то через свой веб-сайт), так что у меня есть таблица под названием заказов, где я держу user_id пользователя, который купил и product_id быть купить. Каждый идентификатор продукта относятся к продукту, который имеет пользователь (тот, что я делаю запрос для): выберите COUNT (отчетливый (o.user_id)) как total_clients из `order` о внутреннем соединении произведения р на p.id = o.product_id, где p.user_id = 32; Идентификатор пользователя 32 опознан и я хочу, чтобы показать ему, как многие клиенты приобрели свою продукцию. Я хочу сделать это в ГЭТ вместо фильтра, как это имеет смысл. Вот что моя логика говорит мне, чтобы написать: клиенты = Order.objects.get (статус = Order.COMPLETED, product__user = self.user) .annotate (total_clients = Count ( 'пользователя', отчетливые = True)) возвращают clients.total_clients .И вот что он возвращает: Тип исключения: MultipleObjectsReturned Исключение Значение: получить () возвращала более одного заказа - он вернулся 2! Я мог бы быть запущен запрос вместо того, чтобы использовать ORM, но я не хочу этого. Это довольно простой запрос, который я уверен, что Django обрабатывает очень легко, и я хочу, чтобы держаться подальше от написания строк в моем коде. Вот моя установка модели: класс UserProfile (models.Model): пользователь = models.OneToOneField (Пользователь, related_name = 'Профиль') .... Защита get_total_clients (самостоятельно): клиенты = Order.objects.get (статус = Order.COMPLETED , product__user = self.user) .annotate (total_clients = Count ( 'пользователь', отчетливые = True)) возвращают клиентам.
Romeo Mihalcea
1

голосов
1

ответ
54

Просмотры

Algorithm to sort object by attribute value without allowing gaps or duplicates

У меня есть повестка с несколькими датами, каждая дата может содержать 0> ... элементы. Элементы могут быть отсортированы по позиции, позиции должны быть целые значения без пробелов и дублей. Класс товар (models.Model): дата = положение models.DateField () = models.IntegerField () Защиты процедура move_to (положение):. QS = само .__ класс __ objects.filter (дата = self.date) # если положение принимается , переместить все элементы GTE позиции № 1 место, чтобы освободить желаемое положение, если положение в qs.values_list ( 'положение', квартира = True): qs.filter (position__gte = положение) .update (позиция = F ( 'положение') + 1) self.position = положение self.save () Это своего рода работает, но если я перееду детали назад и вперед между датами я остался с зазорами позиции, например, «1, 4, 13» Так что не обрезает пробелы,
RabbitInAHole
1

голосов
1

ответ
50

Просмотры

Выбор минимального и группировки

У меня есть следующие таблицы: идентификатор | product_id | Количество -------------------------- 1 | 222 | 25 2 | 222 | 35 3 | 223 | 10 Теперь я хочу, чтобы выбрать самые низкие величины, сгруппированные по product_id. В SQL это работает ВЫБЕРИТЕ product_id, MIN (количество) FROM my_table GROUP BY PRODUCT_ID Результатом этого запроса является следующая product_id | MIN (количество) -------------------------- 222 | 25 223 | 10 Тем не менее, как я могу использовать модели базы данных Django, чтобы сделать то же самое? Я попытался myModel.objects.filter (product__in = product_ids) .annotate (Min ( "количество")). Values_list ( "продукт", "quantity__min") Это возвращает полную таблицу.
MikkoP
1

голосов
2

ответ
293

Просмотры

Объединение двух запросов в Django ORM

У меня есть модель человека, который день рождения. Я хотел бы создать запрос, который возвращает всю информацию о лицах, вместе с дополнительным полем, который рассказывает, как много людей разделяют день рождения каждого человека. В SQL я бы написать это: SELECT p.name, b.count от лиц, как п INNER JOIN (SELECT день рождения как дата, COUNT (*) AS отсчитываются от лиц GROUP_BY рождения) AS б ГДЕ p.birthday = b.date с Django querysets я могу сделать внутренний выбор, но я не знаю, как это сделать внутреннее соединение.
1

голосов
1

ответ
37

Просмотры

Комплекс каскадных в Django модели

У меня есть три модели Django: класс Приглашение (models.Model): пользователь = models.ForeignKey (settings.AUTH_USER_MODEL) invited_by = models.ForeignKey ( "Пользователь") события = models.ForeignKey ( "Событие", related_name = "приглашение") класс пользователя (models.Model): имя = models.CharField (_ ( 'полное имя')) класс события (models.Model): название = models.CharField () приглашенные = models.ManyToManyField (settings.AUTH_USER_MODEL) владелец = модели .ForeignKey (settings.AUTH_USER_MODEL) Теперь я хочу, чтобы удалить модель событий, если приглашенные пустеет. Таким образом, у нас есть два пользователя, Тим и Боб. Тим приглашает Боб к событию. Таким образом, у нас есть объект события и объект приглашения. Боб удалить его учетную запись. Приглашение удаляется, но событие остается без какого-либо приглашенных. Я хочу, чтобы это автоматически удалить событие.
Rob
1

голосов
1

ответ
117

Просмотры

Group records by date and add list of fields

У меня есть следующие модели: класс Book (models.Model): имя = models.CharField (max_length = 255) опубликовано = models.DateField () items_sold = models.IntegerField () Теперь я хочу, чтобы сгруппировать все книги по опубликованной дате и Я хочу, чтобы SUM проданных предметов (items_sold). Кроме того, я хочу, чтобы добавить список имен всех к выходу. Так что мой ожидаемый результат будет выглядеть следующим образом: [{ 'дата': datetime.date (2015, 12, 14), 'total_sold': 5000, 'имена': [ 'Book A', 'Книга B']}, { 'дата': datetime.date (2016, 11, 4), 'total_sold': 10000, 'имена': [ 'Книга C']}, ...] Я попытался решить это с помощью Аннотировать: Book.objects.values ( «дата»). аннотация (total_sold = Sum ( «items_sold»)) Но я понятия не имею, как я могу получить список имен в результат. Является ли аннотирования правильного подхода здесь? Кто-нибудь идея, как решить эту проблему? EDIT: Благодаря комментарию Тодора, я нашел частично решение, используя пользовательский Aggregate: класс Concat (models.Aggregate): "" "Использование SQLite` group_concat` функции """ функция = 'GROUP_CONCAT' шаблона =«% (функция) S ( % (поле) s "% (разделитель) s")»Теперь у меня есть этот запрос: Book.objects.values ​​( ''). аннотацию (total_sold = Sum ( 'дата items_sold'), имена = Concat ( 'имена' , сепаратор = ' ')> [{' дата': datetime.date (2016, 1, 5), 'total_sold': 5000, 'имена': 'Книга A, Книга B'}, ...,] The Сейчас проблема заключается в том, что имена книги сцепляется в строке имена. Я могу определить разделитель, но я не знаю, как преобразовать имена в список. Я мог бы сделать это позже, используя раскол (names.split (сепаратор)), но я думаю, что это не напасешься, как мой сепаратор может также быть частью названия книги. Какие-либо предложения?
ilse2005
1

голосов
1

ответ
22

Просмотры

Создание миграции при факторинге новую модель из уже существующего

У меня есть некоторый код, как это: класс Item (models.Model): что-то = models.ForeignKey ( 'SomethingElse') property1 = models.TextField () город = models.TextField () улица = models.TextField () страна = модели. TextField () И я хотел бы, чтобы сформировать его как это: класс Address (models.Model): город = models.TextField () улица = models.TextField () страна = models.TextField () класса Item (models.Model): что-то = models.ForeignKey ( 'SomethingElse') property1 = models.TextField (адрес) = models.ForeignKey ( 'Address') При попытке перенести проект, Django просит меня создать значение по умолчанию. Как я мог бы указать один? Кроме того, как я мог бы создать миграцию, которая создает адреса, основанные на том, что у нас уже есть в БД, а затем связать тех элементов?
d33tah
1

голосов
1

ответ
229

Просмотры

Django ORM: настроить ListView, и добавить информацию в своей QuerySet

У меня есть мнение, чтобы перечислить определенную модель (назовем его класс А), например: класс BaseListView (ListView, MultipleObjectMixin): http_method_names = [ 'получить'] order_field = Нет четкости не get_paginate_by (я, QuerySet): SESSION_MANAGER = SessionManager ( self.request.session) возвращение session_manager.paginate_by.get () защиту get_context_data (я, ** kwargs): контекст = супер (BaseListView, самость) .get_context_data (** kwargs) SESSION_MANAGER = SessionManager (self.request.session) SESSION_MANAGER .paginate_by.set_to (контекст) возвращение контекста было только то, что было необходимо Эта точка зрения, до сих пор. Теперь я должен сравнить список объектов, которые он извлекает с другим списком объектов (класс B). Объекты класса А и В обоих есть первичный ключ с их именем. Я хочу, чтобы проверить, если какой-либо из объектов из класса А имеет то же имя (первичный ключ), как любой из объектов класса B. В случае является экземпляром А в BI хотел бы добавить определенный параметр или что-то вроде is_in_B = True. Мне это нужно, так что я могу представить эти экземпляры А по-другому в шаблоне. Как я могу это сделать? Это то, что я придумал сам на данный момент: класс AListView (BaseListView): модель = «A» Защита get_queryset (Я): QuerySet = супер (AListView, самость). get_query_set () all_objects_A = A.objects.all () all_objects_B = B.objects.all () # изменить QuerySet, чтобы указать, какие экземпляры не присутствуют в B # Не знаю, как это сделать обратный QuerySet Я не совсем уверен, что это является подход, соответствующий ему. Также,
Xar

Просмотр дополнительных вопросов