def add_edit_music(request,user_id,music_id=None,from_album='0',album_id=None):
if music_id:
# For update this view is called
music = get_object_or_404(UserSong, pk=music_id)
print("for update")
else:
# For adding this view is called
music = UserSong()
print("here")
if music.pk is not None:
# If music_id already exists in db
# genre = music.genre.all().values_list('name',flat=True)
genre = music.genre.all()
# language = music.language.all().values_list('name',flat=True)
language = music.language.all()
pass
else:
genre = []
language = []
form = MusicForm(request.POST or None,request.FILES or None,initial={'genre': genre,
'language':language},instance=music)
# check whether it's valid:
if request.POST and form.is_valid():
print("vlaid ")
print("form.cleaned_data['genre']",type(form.cleaned_data['genre'][0]))
model_instance = form.save(user_id,commit=True)
sound = AudioSegment.from_file(model_instance.song_file, format="mp3")
model_instance.duration = (len(sound)/1000)
model_instance.slug_usersong = slugify("{0}{1}".format(model_instance.title,model_instance.id))
model_instance.save() # This is overrided, see MusicForm class
if model_instance.is_paid and model_instance.is_public:
product_item = Product.objects.create(inventory=form.cleaned_data['inventory'], sub_inventorys=form.cleaned_data['inventory'],
user_id = user_id, sku="blah", song_file = model_instance.song_file.url,
title=model_instance.title, genre=model_instance.genre.all(),
language=model_instance.language.all(), price = model_instance.price,
description=model_instance.description, composer=model_instance.composer,
release_date=model_instance.release_date, record_label= model_instance.record_label,
buylink=model_instance.buylink, image=model_instance.image.url,
status=model_instance.status)
product_item.save()
if from_album == '0':
# add_edit_music view triggered not from add_album form
return redirect(reverse('show_music',args=(user_id,)))
else:
#add_edit_music view triggered from add_album_form
if album_id == '0':
# album_id == '0' means album is not yet saved in database
return redirect(reverse('album_add_step_2',args=(user_id,album_id,)))
else:
# album_id != '0' means album is already saved
return redirect(reverse('album_add_step_2',args=(user_id,)))
return render(request, 'songdewUser/music_new.html', {'form': form})
class MusicForm(forms.ModelForm):
# queryset = Genre.objects.all()
# GENRE_OPTIONS =( (i.name,i.name) for i in queryset)
# queryset = Language.objects.all()
# LANGUAGE_OPTIONS =( (i.name,i.name) for i in queryset)
# queryset = UserProfile.objects.filter(user__is_type='art')
# ARTIST_OPTIONS = ( ( '{0}{1}'.format(i.first_name,i.last_name),'{0}{1}'.format(i.first_name,i.last_name)) for i in queryset)
image = forms.ImageField()
title = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'title'}))
description = forms.CharField(widget=forms.Textarea(attrs={'class':'form-control','placeholder':'description'}))
genre = forms.ModelMultipleChoiceField(queryset=Genre.objects.all())
language = forms.ModelMultipleChoiceField(queryset=Language.objects.all())
composer = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'composer'}))
tags = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'tags'}))
is_public = forms.BooleanField(required=False,widget=forms.CheckboxInput())
is_downloadable = forms.BooleanField(required=False,widget=forms.CheckboxInput())
release_date = forms.DateField(widget=forms.SelectDateWidget(years=[y for y in range(1930,2050)]))
record_label = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'record label'}))
buylink = forms.CharField(required=False,widget=forms.TextInput(attrs={'class':'form-control','placeholder':'buy link'}))
is_paid = forms.BooleanField(required=False,widget=forms.CheckboxInput())
price = forms.IntegerField(required=False)
is_album = forms.BooleanField(required=False,widget=forms.CheckboxInput())
youtube_url = forms.CharField(required=False,widget=forms.TextInput(attrs={'class':'form-control','placeholder':'youtube url'}))
song_file = forms.FileInput()
artist = forms.ModelMultipleChoiceField(queryset=UserProfile.objects.filter(user__is_type='art'))
inventory = forms.IntegerField(required=False)
status = forms.BooleanField(required=False,widget=forms.CheckboxInput())
class Meta:
model = UserSong
fields = ('song_file','title','description','genre','language','composer','tags','is_public','youtube_url',
'is_downloadable','release_date','buylink','is_paid','price','is_album','image','status','artist','record_label',)
def save(self,*args, commit=True):
instance = super(MusicForm, self).save(commit=False)
if not isinstance(instance.created_date,datetime):
instance.created_date = datetime.now()
instance.user = User.objects.get(pk=args[0])
instance.updated_date = datetime.now()
if commit:
instance.save()
print("artist received is ",self.cleaned_data['artist'])
# instance.genre.clear()
genre_name_list = Genre.objects.filter(name__in=self.cleaned_data['genre'].values_list('name',flat=True))
# instance.genre.add(*genre_name_list)
instance.genre.set(genre_name_list)
# instance.language.clear()
language_name_list = Language.objects.filter(name__in=self.cleaned_data['language'].values_list('name',flat=True))
# instance.language.add(*language_name_list)
instance.language.set(language_name_list)
# instance.artist.clear()
artist_name_list = UserProfile.objects.filter(user__username__in=self.cleaned_data['artist'].values_list('first_name',flat=True))
instance.artist.set(artist_name_list)
self.save_m2m()
return instance