- Author:
- sbaechler
- Posted:
- September 22, 2011
- Language:
- Python
- Version:
- 1.3
- Score:
- 0 (after 0 ratings)
This code allows you to upload a mp3 to the Admin Frontend. The ID3 tags are automatically read out and filled in to the according fields.
This should work for other filetypes as well. As long as they have an id3 tag.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | from mutagen.easyid3 import EasyID3
from django.utils.translation import ugettext_lazy as _
from django.core.files.storage import default_storage
from django.core.files.base import ContentFile
class Song(models.Model):
file = models.FileField(_('File'), upload_to='medialibrary/songs', blank=True, null=True,
help_text=_('Upload an mp3 here and hit [Save and continue editing].<br />The song
infos are read out automatically.'))
artist = models.CharField(_('Artist'), max_length=50, blank=True)
album = models.CharField(_('Album'), max_length=50, blank=True)
title = models.CharField(_('Title'), max_length=50, blank=True)
def clean(self):
if self.file:
path = default_storage.save(os.path.join(settings.MEDIA_ROOT,'tmp','temp.mp3'),
ContentFile(self.file.file.read()))
id3 = EasyID3(os.path.join(settings.MEDIA_ROOT, path))
if not self.artist: self.artist = id3.get('artist', '')[0]
if not self.title: self.title = id3.get('title', '')[0]
if not self.album: self.album = id3.get('album', '')[0]
print id3.get('artist', '')
path = default_storage.delete(os.path.join(settings.MEDIA_ROOT,'tmp','temp.mp3'))
super(Song, self).clean()
|
More like this
- Template tag - list punctuation for a list of items by shapiromatron 10 months, 2 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 10 months, 3 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 5 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 6 months ago
- Help text hyperlinks by sa2812 1 year, 6 months ago
Comments
Nice snippet! How about albumart from mp3 to ImageField?
#
Please login first before commenting.