Commit 12de0433 authored by PJ Janse van Rensburg's avatar PJ Janse van Rensburg

Merge branch 'master' into nested-categories

parents e73f6acc 108cbd75
......@@ -8,6 +8,7 @@ next release
* Upgrade Leaflet and Leaflet.draw plugins, used for geoalchemy integration
* Specify `minimum_input_length` for ajax widget
* SQLAlchemy fix that lets you use inline model forms where models have multiple primary keys
* Peewee: support composite keys
* MongoEngine: when searching/filtering the input is now regarded as case-insensitive by default
1.5.2
......
......@@ -184,6 +184,10 @@ class ModelView(BaseModelView):
return get_primary_key(self.model)
def get_pk_value(self, model):
if self.model._meta.composite_key:
return tuple([
model._data[field_name]
for field_name in self.model._meta.primary_key.field_names])
return getattr(model, self._primary_key)
def scaffold_list_columns(self):
......@@ -440,6 +444,8 @@ class ModelView(BaseModelView):
return count, query
def get_one(self, id):
if self.model._meta.composite_key:
return self.model.get(**dict(zip(self.model._meta.primary_key.field_names, id)))
return self.model.get(**{self._primary_key: id})
def create_model(self, form):
......
......@@ -18,7 +18,7 @@ from wtforms.fields import HiddenField
from wtforms.fields.core import UnboundField
from wtforms.validators import ValidationError, InputRequired
from flask_admin.babel import gettext
from flask_admin.babel import gettext, ngettext
from flask_admin.base import BaseView, expose
from flask_admin.form import BaseForm, FormOpts, rules
......@@ -2204,7 +2204,11 @@ class BaseModelView(BaseView, ActionsMixin):
# message is flashed from within delete_model if it fails
if self.delete_model(model):
flash(gettext('Record was successfully deleted.'), 'success')
count = 1
flash(
ngettext('Record was successfully deleted.',
'%(count)s records were successfully deleted.',
count, count=count), 'success')
return redirect(return_url)
else:
flash_errors(form, message='Failed to delete record. %(error)s')
......
......@@ -31,7 +31,7 @@
{% elif csrf_token %}
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
{% endif %}
<button onclick="return safeConfirm('{{ _gettext('Are you sure you want to delete this record?') }}');" title="Delete record">
<button onclick="return safeConfirm('{{ _gettext('Are you sure you want to delete this record?') }}');" title="{{ _gettext('Delete record') }}">
<span class="fa fa-trash glyphicon glyphicon-trash"></span>
</button>
</form>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment