Anonymous avatar Anonymous committed 9a1d27c

Added auto-tag feature

Comments (0)

Files changed (2)

gnocchi_blog/admin.py

     actions = ('publish_newsletter',)
 
     form = forms.BlogAdminForm
+    fieldsets = (
+        (None, {
+            'fields': ('title', 'slug', 'published',),
+        },),
+        ('Content', {
+            'classes': ('wide',),
+            'fields': ('content',),
+        },),
+        ('Extras', {
+            'fields': (('post_date', 'kill_date',),('auto', 'tags',),),
+        },),
+    )
 
     def queryset(self, request):
         qset = self.model.objects.all()
 
     def save_model(self, request, obj, form, change):
         if not change:
+            # initial posting
             obj.posted_by = request.user
         obj.save()
 

gnocchi_blog/forms.py

 from django import forms
 from gnocchi_blog.models import BlogPost
+from taggit.models import TaggedItem
+import re
 
 class BlogAdminForm(forms.ModelForm):
-    auto = forms.BooleanField('Auto-tag?', default=False,
+    auto = forms.BooleanField(label='Auto-tag?', required=False,
         help_text="Automatically scan content for tags"
     )
     class Meta:
         model = BlogPost
+    def clean(self):
+        data = self.cleaned_data
+        if data['auto']:
+            tags = set(data['tags'])
+            tags.update([
+                tag
+                for tag in TaggedItem.tags_for(BlogPost)
+                if re.search(r'\b%s\b' % tag.name, data['content'], re.I|re.M)
+            ])
+            data['tags'] = list(tags)
+        return data
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.