При разработке вы постоянно сталкиваетесь с различными проблемами, которые зачастую невозможно решить в лоб.
Но многие проблемы уже кем-то решены – нужно только найти это решение.
Итак, день за днем я собирал небольшую коллекцию батареек, которые значительно облегчили мне жизнь.
Чем спешу поделиться:
Джанго-select2
Как следует из названия, батарея позволяет использовать популярную библиотеку выбрать2 в ваших проектах Django. Приложение включает в себя набор полей формы и виджетов на все случаи жизни.Он содержит два типа виджетов:
- Свет — виджеты для не очень длинных списков значений, так как все значения выводятся на страницу сразу;
- Тяжелый — расширенные виджеты для загрузки данных через Ajax из внешнего источника.
Таким источником может быть ваш собственный View или, если не требуется сложная логика, встроенный View в django-select2 может использоваться для возврата данных совместно с соответствующим АвтоТяжелый -виджет.
Джанго-битное поле
Позволяет хранить списки значений в поле модели в виде битового массива, длина которого ограничена максимальной длиной BigInt в используемой базе данных.Пример использования (взято из документации):
from bitfield import BitField class MyModel(models.Model): flags = BitField(flags=( 'awesome_flag', 'flaggy_foo', 'baz_bar', ))
НО
У батареи есть, на мой взгляд, существенный недостаток - стандартными средствами невозможно отобразить флаги в понятном виде ни в админке, ни в собственных шаблонах.Для себя я решил эту проблему следующим образом: модели.
py: from django.db import models
from django.utils.translation import ugettext_lazy as _
from bitfield import BitField
class MyModel(models.Model):
FLAGS = (
('flag1', _('flag 1 description')),
('flag2', _('flag 2 description')),
('flag3', _('flag 3 description')),
)
flags = BitField([k for k, v in FLAGS])
формы.
py from django import forms
from .
models import MyModel class MyModelForm(forms.ModelForm): def _set_choices(self, field, choices): self.fields[field].
widget.choices = choices def __init__(self, *args, **kwargs): super(MyModelForm, self).
__init__(*args, **kwargs)
self._set_choices('flags', MyModel.FLAGS)
admin.py from django.contrib import admin
from .
forms import MyModelForm from .
models import MyModel
class MyModelAdmin(admin.ModelAdmin):
form = MyModelForm
admin.site.register(MyModel, MyModelAdmin)
GitHub
тегирование Джанго
Существует несколько реализаций тегов для Django, но я хотел бы обратить ваше внимание на ветку машинных тегов из этой статьи.Такая реализация тегов добавляет возможность разделять их между пространствами имен и, соответственно, использовать разные наборы тегов для разных полей.
Также есть возможность присваивать тегу дополнительные значения и хранить наборы одинаковых тегов, но с разными значениями.
Честно говоря, я пока не нашел этому применения.
Моя вилка на GitHub с некоторыми исправлениями.
Но сам модуль не поддерживает автодополнение — а это, согласитесь, очень полезная функция.
Существует множество реализаций: один раз , два , три — это только первые ссылки из Google. Но ни один из них не поддерживает пространства имен из описанной выше версии с тегами django, поэтому я взял на себя смелость исправить этот недостаток.
Вот так появилась моя вилка.
Джанго-тегирование-автопредложение
Я не буду никак переписывать документацию, поэтому просто приведу пример использования: Приложение необходимо добавить в INSTALLED_APPS и в urls.py проекта: from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^tagging/', include('tagging_autosuggest.urls')),
)
И добавьте в модель необходимые поля:
from django.db import models
from tagging_autosuggest.fields import TagAutosuggestField
class MyModel(models.Model):
tags1 = TagAutosuggestField(namespace='ns1', max_length=300)
tags2 = TagAutosuggestField(namespace='ns2', max_length=300)
Результат:
GitHub
Джанго-автозаполнение-свет
Еще одна батарейка, облегчающая работу со списками.Создает удобные виджеты в админке с автозаполнением для таких полей как CharField, ForeignKey, ManyToMany, а также для универсальных связей (ForeignKey и M2M).
Примеры использования можно найти в тестовый проект .
А вот как GenericForeignKey выглядит в реальном проекте:
GitHub Документация
Мой скромный вклад в opensource: github.com/YuegoЭtab=репозитории
Сообщения об ошибках, опечатках и т.п.
традиционно принимаются в личном сообщении.
Теги: #django #batteries #select2 #bitfield #tagged #tagged-autosuggest #autocomplete #django
-
Лукьянова Гидроинтегратор
19 Oct, 24 -
Полный Кошмар: Usb-C И Thunderbolt 3
19 Oct, 24