1
0
Fork 0

Make add another default, add select2, remember last parent

This commit is contained in:
Piotr Dobrowolski 2017-02-16 16:14:37 +01:00
parent b653ec8e25
commit 8b539e5926
8 changed files with 73 additions and 23 deletions

View File

@ -1,4 +1,6 @@
Django==1.10.1
git+https://github.com/djangonauts/django-hstore@61427e474cb2f4be8fdfce225d78a5330bc77eb0#egg=django-hstore
django-appconf==1.0.2
Django-Select2==5.8.10
Pillow==3.3.1
psycopg2==2.6.2

View File

@ -41,6 +41,7 @@ INSTALLED_APPS = [
'django_hstore',
'tree',
'django_select2',
'storage',
]

View File

@ -11,6 +11,7 @@ from django.conf.urls.static import static
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^select2/', include('django_select2.urls')),
url(r'^', include('storage.urls')),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

View File

@ -1,6 +1,8 @@
from django import forms
from django.contrib import admin
from .models import Item, ItemImage, Category
from django_select2.forms import Select2Widget, Select2MultipleWidget
class ItemForm(forms.ModelForm):
name = forms.CharField(widget=forms.TextInput())
@ -8,6 +10,10 @@ class ItemForm(forms.ModelForm):
class Meta:
model = Item
exclude = []
widgets = {
'parent': Select2Widget,
'categories': Select2MultipleWidget
}
class ItemImageInline(admin.TabularInline):
model = ItemImage
@ -22,6 +28,27 @@ class ItemAdmin(admin.ModelAdmin):
def _name(self, obj):
return '-' * obj.get_level() + '> ' + obj.name
def save_model(self, request, obj, form, change):
super(ItemAdmin, self).save_model(request, obj, form, change)
# Store last input parent to use as default on next creation
if obj.parent:
request.session['last-parent'] = str(obj.parent.uuid)
else:
request.session['last-parent'] = str(obj.uuid)
def get_changeform_initial_data(self, request):
data = {
'parent': request.session.get('last-parent')
}
data.update(super(ItemAdmin, self).get_changeform_initial_data(request))
return data
class Media:
js = (
# Required by select2
'http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js',
)
admin.site.register(Item, ItemAdmin)
admin.site.register(Category)

View File

@ -27,11 +27,12 @@ class Category(models.Model):
class Item(models.Model, TreeModelMixin):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.TextField()
parent = models.ForeignKey('self', null=True, blank=True)
path = PathField()
name = models.TextField()
description = models.TextField(blank=True, null=True)
state = models.CharField(max_length=31, choices=STATES, default=STATES[0][0])
categories = models.ManyToManyField(Category, blank=True)

View File

@ -0,0 +1,7 @@
{% extends "admin/change_form.html" %}
{% block submit_buttons_bottom %}
{# We want add another to be default submit action #}
<input type="submit" value="Save" class="hidden" name="_addanother" />
{{ block.super }}
{% endblock %}

View File

@ -15,7 +15,8 @@ def apply_smart_search(query, objects):
key, value = prop.split(':', 1)
if hasattr(Item, key):
filters[key + '__search'] = value
elif key == 'ancestor':
objects = Item.objects.get(pk=value).get_children()
elif key == 'prop' or value:
if key == 'prop':
key, value = value.split(':', 1)

View File

@ -7,31 +7,41 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link rel="stylesheet" href="{% static 'css/bootstrap.css' %}" media="screen">
<style>
.btn {
font-size: 1.4em;
text-transform: none;
margin-bottom: 10px;
padding: 15px;
}
.btn .glyphicon {
padding: 0 10px;
}
.btn-alt {
background: #4b176d;
color:white;
border-color: #2d0d42; /*#301934;*/
}
.btn-alt:hover, .btn-alt:active, .btn-alt:link, .btn-alt:visited {
color: white;
}
</style>
</head>
<body>
{% block body %}
<nav class="navbar navbar-default">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">spejstore</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="/item/">Items</a></li>
</ul>
<form class="navbar-form navbar-right" role="search" action="/search">
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" placeholder="Search" name="q">
<span class="input-group-btn">
<button class="btn btn-primary" type="submit"><i class="glyphicon glyphicon-search"></i></button>
</span>
</div>
</div>
</form>
</div>
</div>
</nav>
<div class="container">
<h1 class="page-header">Warsaw Hackerspace <small class="hidden-sm hidden-xs">Enjoy your stay</small></h1>
<!--<h1 class="page-header">Warsaw Hackerspace <small class="hidden-sm
hidden-xs">Enjoy your stay</small></h1>-->
{% block content %}
{% endblock %}
</div>