subclass ManyToManyField to update path after adding authors
This commit is contained in:
parent
d2df21d8d2
commit
534f8a0df1
2 changed files with 13 additions and 6 deletions
|
@ -11,6 +11,8 @@ class TextAdmin(admin.ModelAdmin):
|
|||
search_fields = ['title', 'authors__name', 'languages__name']
|
||||
list_display = ('title', 'version', 'file')
|
||||
list_filter = ('authors', )
|
||||
filter_horizontal = ('authors', )
|
||||
|
||||
admin.site.register(models.Text, TextAdmin)
|
||||
|
||||
|
||||
|
|
|
@ -36,6 +36,12 @@ class Author(models.Model):
|
|||
for text in self.texts.all():
|
||||
text.save()
|
||||
|
||||
class AuthorField(models.ManyToManyField):
|
||||
def save_form_data(self, instance, data):
|
||||
super(AuthorField, self).save_form_data(instance, data)
|
||||
#save instance after adding authors, file gets updated here
|
||||
instance.save()
|
||||
|
||||
class Language(models.Model):
|
||||
name = models.CharField(blank=True, max_length=1000)
|
||||
class Meta:
|
||||
|
@ -49,8 +55,8 @@ class Text(models.Model):
|
|||
title = models.CharField(blank=True, max_length=1000)
|
||||
version = models.CharField(blank=True, max_length=1000)
|
||||
|
||||
file = models.FileField(upload_to='Incoming', blank=True, max_length=2000)
|
||||
authors = models.ManyToManyField(Author, related_name='texts', blank=True)
|
||||
file = models.FileField(upload_to='tmp', blank=True, max_length=2000)
|
||||
authors = AuthorField(Author, related_name='texts', blank=True)
|
||||
languages = models.ManyToManyField(Language, related_name='texts', blank=True)
|
||||
compilation = models.BooleanField(default=False)
|
||||
|
||||
|
@ -117,6 +123,7 @@ class Text(models.Model):
|
|||
super(Text, self).save(*args, **kwargs)
|
||||
if rename and self.file:
|
||||
path = self.getComputedPath()
|
||||
print path
|
||||
if path != self.file.path:
|
||||
#FIXME: make sure path is not used by other test in system
|
||||
if not os.path.exists(os.path.dirname(path)):
|
||||
|
@ -125,10 +132,8 @@ class Text(models.Model):
|
|||
#print 'old', self.file.path
|
||||
#print 'new', path
|
||||
os.rename(self.file.path, path)
|
||||
#FIXME: remove old dir if its empy
|
||||
if not glob('%s/*' % old_dir):
|
||||
os.rmdir(old_dir)
|
||||
self.file.name = path[len(settings.MEDIA_ROOT) + 1:]
|
||||
#this could be recursive!
|
||||
self.save()
|
||||
self.save(rename=False)
|
||||
|
||||
|
|
Loading…
Reference in a new issue