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 ...@@ -8,6 +8,7 @@ next release
* Upgrade Leaflet and Leaflet.draw plugins, used for geoalchemy integration * Upgrade Leaflet and Leaflet.draw plugins, used for geoalchemy integration
* Specify `minimum_input_length` for ajax widget * Specify `minimum_input_length` for ajax widget
* SQLAlchemy fix that lets you use inline model forms where models have multiple primary keys * 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 * MongoEngine: when searching/filtering the input is now regarded as case-insensitive by default
1.5.2 1.5.2
......
...@@ -184,6 +184,10 @@ class ModelView(BaseModelView): ...@@ -184,6 +184,10 @@ class ModelView(BaseModelView):
return get_primary_key(self.model) return get_primary_key(self.model)
def get_pk_value(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) return getattr(model, self._primary_key)
def scaffold_list_columns(self): def scaffold_list_columns(self):
...@@ -440,6 +444,8 @@ class ModelView(BaseModelView): ...@@ -440,6 +444,8 @@ class ModelView(BaseModelView):
return count, query return count, query
def get_one(self, id): 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}) return self.model.get(**{self._primary_key: id})
def create_model(self, form): def create_model(self, form):
......
...@@ -18,7 +18,7 @@ from wtforms.fields import HiddenField ...@@ -18,7 +18,7 @@ from wtforms.fields import HiddenField
from wtforms.fields.core import UnboundField from wtforms.fields.core import UnboundField
from wtforms.validators import ValidationError, InputRequired 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.base import BaseView, expose
from flask_admin.form import BaseForm, FormOpts, rules from flask_admin.form import BaseForm, FormOpts, rules
...@@ -2204,7 +2204,11 @@ class BaseModelView(BaseView, ActionsMixin): ...@@ -2204,7 +2204,11 @@ class BaseModelView(BaseView, ActionsMixin):
# message is flashed from within delete_model if it fails # message is flashed from within delete_model if it fails
if self.delete_model(model): 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) return redirect(return_url)
else: else:
flash_errors(form, message='Failed to delete record. %(error)s') flash_errors(form, message='Failed to delete record. %(error)s')
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
{% elif csrf_token %} {% elif csrf_token %}
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
{% endif %} {% 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> <span class="fa fa-trash glyphicon glyphicon-trash"></span>
</button> </button>
</form> </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