* Fix inline models in Admin

* Use signals correctly
(Thanks, David Clymer)
This commit is contained in:
Ross Poulton 2008-08-13 21:42:57 +00:00
parent c762313e08
commit 4d6859ba42
4 changed files with 30 additions and 19 deletions

View File

@ -1,6 +1,7 @@
from django.contrib import admin
from helpdesk.models import Queue, Ticket, FollowUp, PreSetReply, KBCategory
from helpdesk.models import EscalationExclusion, EmailTemplate, KBItem
from helpdesk.models import TicketChange, Attachment
class QueueAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'email_address')
@ -10,17 +11,23 @@ class TicketAdmin(admin.ModelAdmin):
date_hierarchy = 'created'
list_filter = ('assigned_to', 'status', )
class GenericAdmin(admin.ModelAdmin):
pass
class TicketChangeInline(admin.StackedInline):
model = TicketChange
class AttachmentInline(admin.StackedInline):
model = Attachment
class FollowUpAdmin(admin.ModelAdmin):
inlines = [TicketChangeInline, AttachmentInline]
class PreSetReplyAdmin(admin.ModelAdmin):
list_display = ('name',)
admin.site.register(Ticket, TicketAdmin)
admin.site.register(Queue, QueueAdmin)
admin.site.register(FollowUp, GenericAdmin)
admin.site.register(PreSetReply, GenericAdmin)
admin.site.register(EscalationExclusion, GenericAdmin)
admin.site.register(EmailTemplate, GenericAdmin)
admin.site.register(KBCategory, GenericAdmin)
admin.site.register(KBItem, GenericAdmin)
admin.site.register(FollowUp, FollowUpAdmin)
admin.site.register(PreSetReply)
admin.site.register(EscalationExclusion)
admin.site.register(EmailTemplate)
admin.site.register(KBCategory)
admin.site.register(KBItem)

View File

@ -12,7 +12,6 @@ from datetime import datetime
from django.contrib.auth.models import User
from django.db import models
from django.conf import settings
from django.dispatch import dispatcher
from django.utils.translation import ugettext_lazy as _
class Queue(models.Model):
@ -243,10 +242,10 @@ class TicketChange(models.Model):
""" For each FollowUp, any changes to the parent ticket (eg Title, Priority,
etc) are tracked here for display purposes.
"""
followup = models.ForeignKey(FollowUp, edit_inline=models.TABULAR)
field = models.CharField(_('Field'), max_length=100, core=True)
old_value = models.TextField(_('Old Value'), blank=True, null=True, core=True)
new_value = models.TextField(_('New Value'), blank=True, null=True, core=True)
followup = models.ForeignKey(FollowUp)
field = models.CharField(_('Field'), max_length=100)
old_value = models.TextField(_('Old Value'), blank=True, null=True)
new_value = models.TextField(_('New Value'), blank=True, null=True)
def __unicode__(self):
str = u'%s ' % field
@ -274,9 +273,9 @@ class DynamicFileField(models.FileField):
def contribute_to_class(self, cls, name):
"""Hook up events so we can access the instance."""
super(DynamicFileField, self).contribute_to_class(cls, name)
dispatcher.connect(self._post_init, models.signals.post_init, sender=cls)
models.signals.post_init.connect(self._post_init, sender=cls)
def _post_init(self, instance=None):
def _post_init(self, instance=None, **kwargs):
"""Get dynamic upload_to value from the model instance."""
if hasattr(instance, 'get_upload_to'):
self.upload_to = instance.get_upload_to(self.attname)
@ -286,8 +285,8 @@ class DynamicFileField(models.FileField):
return 'varchar(100)'
class Attachment(models.Model):
followup = models.ForeignKey(FollowUp, edit_inline=models.TABULAR)
file = DynamicFileField(_('File'), upload_to='helpdesk/attachments', core=True)
followup = models.ForeignKey(FollowUp)
file = DynamicFileField(_('File'), upload_to='helpdesk/attachments')
filename = models.CharField(_('Filename'), max_length=100)
mime_type = models.CharField(_('MIME Type'), max_length=30)
size = models.IntegerField(_('Size'), help_text=_('Size of this file in bytes'))

View File

@ -17,6 +17,8 @@ from email.Utils import parseaddr
from helpdesk.models import Queue, Ticket, FollowUp, Attachment
from helpdesk.lib import send_templated_mail
from django.core.files.base import ContentFile
def process_email():
for q in Queue.objects.filter(email_box_type__isnull=False, allow_email_submission=True):
if not q.email_box_last_check: q.email_box_last_check = datetime.now()-timedelta(minutes=30)
@ -173,7 +175,8 @@ def ticket_from_message(message, queue):
for file in files:
filename = file['filename'].replace(' ', '_')
a = Attachment(followup=f, filename=filename, mime_type=file['type'], size=len(file['content']))
a.save_file_file(file['filename'], file['content'])
#a.save_file_file(file['filename'], file['content'])
a.file.save(file['filename'], ContentFile(file['content']))
a.save()
print " - %s" % file['filename']

View File

@ -10,6 +10,7 @@ from datetime import datetime
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
from django.core.files.base import ContentFile
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.http import HttpResponseRedirect, Http404, HttpResponse
@ -194,7 +195,8 @@ def update_ticket(request, ticket_id):
for file in request.FILES.getlist('attachment'):
filename = file['filename'].replace(' ', '_')
a = Attachment(followup=f, filename=filename, mime_type=file['content-type'], size=len(file['content']))
a.save_file_file(file['filename'], file['content'])
#a.save_file_file(file['filename'], file['content'])
a.file.save(file['filename'], ContentFile(file['content']))
a.save()
ticket.save()