# settings.py
from django.db.backends.mysql.base import DatabaseWrapper
DatabaseWrapper.data_types['DateTimeField'] = 'datetime'
Но надо понимать, что это всего лишь костыль, чтобы быстро запуститься. Поэтому потом всё же лучше актуализировать движок базы. django.urls
, а не django.conf.urls
, как ранее. Старый url()
доступен в этом пакете, вероятно, для совместимости.from django.db.models import Q
class Slider(models.Model):
# ...
content_type = models.ForeignKey(
ContentType,
limit_choices_to=Q(app_label='app_1', model='modelclass1') | Q(app_label='app_2', model='modelclass2')
)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
# ...
limit_choices_to
может принимать callable-объект, возвращающий dict
или Q
):from operator import or_ as OR
from functools import reduce
from django.apps import apps
from django.db.models import Q
def limit(*models):
"""
Динамически построит выражение Q для списка заданных в аргументе моделей.
"""
return reduce(OR, [Q(
app_label=apps.get_model(m)._meta.app_label,
model=apps.get_model(m)._meta.model_name) for m in models
])
class Slider(models.Model):
# ...
content_type = models.ForeignKey(
ContentType,
limit_choices_to=limit('app_1.ModelClass1', 'app_2.ModelClass2'),
)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
# ...
class Slider(models.Model):
content_object = LimitedGenericForeignKey(
allowed_models=['app_1.ModelClass1', 'app_2.ModelClass2']
)
pip install --upgrade django-pagedown
(если я угадал с приложением, конечно) Правильно ли я понимаю что для хранение файлов их нужно разбивать по папкам,
допустим на сервер пользователь с Ником username заливает файл file.mp4, и я сохраняю этот файл по пути u/us/use/user/usern/file.mp4 и такой путь формируется для каждого пользователя
28c5a6d8-f7b5-440f-aeaa-150e4fd0bebc
, а его уже сегментировать? Например, два сегмента по два символа датут прикольные ссылки вида 28/c5/28c5a6d8-f7b5-440f-aeaa-150e4fd0bebc
и возможность разместить 65 тысяч файлов так, чтобы они были по одной штуке в директории :)если будет 2 одинаковых названия файла у одного пользователя то просто добавляю к новому файлу номер (file1.mp4)
>>> a = { 1, 2, 3 }
>>> b = { 2, 3, 4 }
>>> c = { 5, 6 }
>>>
>>> a & b
{2, 3}
>>> a & c
set()
# utils.py
from django.core.cache import cache
def get_bad_words():
return cache.get('bad_words')
# models.py
def set_bad_words(**kwargs):
from django.core.cache import cache
cache.set('bad_words', {w.bword for w in BadWords.objects.all()})
models.signals.post_save.connect(set_bad_words, sender=BadWords)
models.signals.post_delete.connect(set_bad_words, sender=BadWords)
# utils.py
def get_words_from_text(text_string):
return set([w for w in text_string.lower().split()])
# utils.py
def has_bad_words(text_string):
return bool(get_bad_words() & get_words_from_text(text_string))
$ PYTHONPATH=. python standalone/syncaw.py
# syncraw.py
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
from apps.settings_local import *
print(DEBUG)
Можно ли стандартными средствами разбить пункты на группы, что бы отображались в разных блоках? Например, блок "ГЛАВНАЯ" и блок "ГЛАВНАЯ настройки"?
app_1.admin
не регистрировать модель app_1.Model1
app_2
нужно создать прокси-модель app_2.Model2
, указывающую на app_1.Model1
.app_2.Model2
в админке второго приложения app_2.admin
app_2.admin
, но здесь не уверен.