Многие ко многим поискам в Django

Вы в основном хотите иметь дело со строками в памяти как wchar_t массивы вместо символа. Когда Вы делаете любой вид ввода-вывода (как чтение/запись файлов), можно кодировать/декодировать использование UTF-8 (это - вероятно, наиболее распространенное кодирование), который достаточно прост реализовать. Просто погуглите RFCs. Таким образом в оперативной памяти ничто не должно быть многобайтовым. Один wchar_t представляет один символ. Когда Вы приходите к сериализации однако, именно тогда необходимо закодировать к чему-то как UTF-8, где некоторые символы представлены несколькими байтами.

необходимо будет также записать новые версии strcmp и т.д. для строк широкого символа, но это не большая проблема. Самой большой проблемой будет interop с кодом библиотек / существующим кодом, которые только принимают массивы символов.

И когда дело доходит до sizeof (wchar_t) (Вам будут нужны 4 байта, если Вы захотите сделать его правильно) можно всегда переопределять его к большему размеру со взломами определения типа/макроса, если Вы должны.

12
задан Steerpike 23 August 2009 в 15:33
поделиться

1 ответ

Это немного сложно, возможно, вы ищете что-то вроде этого:

>>> from django.db.models import Q
>>> me = User.objects.get(pk=1)
>>> my_friends = UserProfile.objects.get(user=me).friends.all()
>>> docs = Document.objects.filter(
...     Q(author=me) | (
...         Q(author__in=my_friends)
...         & ~Q(author__userprofile__ignored=me)
...     )
... )

Это генерирует следующий SQL (я немного отформатировал исходный вывод):

SELECT "myapp_document".*
FROM "myapp_document" WHERE (
    "myapp_document"."author_id" = %s
    OR (
        "myapp_document"."author_id" IN (
            SELECT U0."id" FROM "myapp_user" U0
            INNER JOIN "myapp_userprofile_friends" U1
                ON (U0."id" = U1."user_id")
            WHERE U1."userprofile_id" = %s
        )
        AND NOT (
            "myapp_document"."author_id" IN (
                SELECT U2."user_id" FROM "myapp_userprofile" U2
                INNER JOIN "myapp_userprofile_ignored" U3
                    ON (U2."id" = U3."userprofile_id")
                WHERE U3."user_id" = %s
            )
            AND "myapp_document"."author_id" IS NOT NULL
        )
    )
)
8
ответ дан 2 December 2019 в 22:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: