diff options
author | Christopher Allan Webber <cwebber@dustycloud.org> | 2011-06-03 18:43:08 -0500 |
---|---|---|
committer | Christopher Allan Webber <cwebber@dustycloud.org> | 2011-06-03 18:43:08 -0500 |
commit | d5e90fe4b487e86261331fab0f7c08f12462625d (patch) | |
tree | 0026ea4a19604b166ddd493bd2679bc4fc898af6 | |
parent | 9bfe1d8e12c77d7a47049bffaa694441abd71489 (diff) | |
download | mediagoblin-d5e90fe4b487e86261331fab0f7c08f12462625d.tar.lz mediagoblin-d5e90fe4b487e86261331fab0f7c08f12462625d.tar.xz mediagoblin-d5e90fe4b487e86261331fab0f7c08f12462625d.zip |
Find out if such a slug exists via a query instead of via a .save() call
-rw-r--r-- | mediagoblin/edit/views.py | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/mediagoblin/edit/views.py b/mediagoblin/edit/views.py index 7df47b18..5cfb2297 100644 --- a/mediagoblin/edit/views.py +++ b/mediagoblin/edit/views.py @@ -34,18 +34,25 @@ def edit_media(request, media): description = media['description']) if request.method == 'POST' and form.validate(): - media['title'] = request.POST['title'] - media['description'] = request.POST['description'] - media['slug'] = request.POST['slug'] - try: - media.save() - except Exception as e: - return exc.HTTPConflict(detail = str(e)) - - # redirect - return exc.HTTPFound( - location=request.urlgen("mediagoblin.user_pages.media_home", - user=media.uploader()['username'], media=media['_id'])) + # Make sure there isn't already a MediaEntry with such a slug + # and userid. + existing_user_slug_entries = request.db.MediaEntry.find( + {'slug': request.POST['slug'], + 'uploader': media['uploader'], + '_id': {'$ne': media['_id']}}).count() + + if existing_user_slug_entries: + form.slug.errors.append( + u'An entry with that slug already exists for this user.') + else: + media['title'] = request.POST['title'] + media['description'] = request.POST['description'] + media['slug'] = request.POST['slug'] + + # redirect + return exc.HTTPFound( + location=request.urlgen("mediagoblin.user_pages.media_home", + user=media.uploader()['username'], media=media['_id'])) # render template = request.template_env.get_template( |