from django import forms from django.contrib.postgres.forms import SimpleArrayField from django.utils.translation import gettext_lazy as _ from .models import * from common.models import MarkStatusEnum from common.forms import * def MusicMarkStatusTranslator(status): trans_dict = { MarkStatusEnum.DO.value: _("在听"), MarkStatusEnum.WISH.value: _("想听"), MarkStatusEnum.COLLECT.value: _("听过") } return trans_dict[status] class SongForm(forms.ModelForm): id = forms.IntegerField(required=False, widget=forms.HiddenInput()) other_info = JSONField(required=False, label=_("其他信息")) class Meta: model = Song # fields = '__all__' fields = [ 'id', 'title', 'source_site', 'source_url', 'artist', 'release_date', 'duration', 'isrc', 'genre', 'cover', 'album', 'brief', 'other_info', ] widgets = { 'artist': forms.TextInput(attrs={'placeholder': _("多个艺术家使用英文逗号分隔")}), 'duration': forms.TextInput(attrs={'placeholder': _("毫秒")}), 'cover': PreviewImageInput(), } class SongMarkForm(MarkForm): STATUS_CHOICES = [(v, MusicMarkStatusTranslator(v)) for v in MarkStatusEnum.values] status = forms.ChoiceField( label=_(""), widget=forms.RadioSelect(), choices=STATUS_CHOICES ) class Meta: model = SongMark fields = [ 'id', 'song', 'status', 'rating', 'text', 'is_private', ] labels = { 'rating': _("评分"), } widgets = { 'song': forms.TextInput(attrs={"hidden": ""}), } class SongReviewForm(ReviewForm): class Meta: model = SongReview fields = [ 'id', 'song', 'title', 'content', 'is_private' ] labels = { 'song': "", 'title': _("标题"), 'content': _("正文"), 'share_to_mastodon': _("分享到长毛象") } widgets = { 'song': forms.TextInput(attrs={"hidden": ""}), } class AlbumForm(forms.ModelForm): id = forms.IntegerField(required=False, widget=forms.HiddenInput()) other_info = JSONField(required=False, label=_("其他信息")) class Meta: model = Album # fields = '__all__' fields = [ 'id', 'title', 'source_site', 'source_url', 'artist', 'company', 'release_date', 'duration', 'genre', 'cover', 'brief', 'track_list', 'other_info', ] widgets = { 'artist': forms.TextInput(attrs={'placeholder': _("多个艺术家使用英文逗号分隔")}), 'company': forms.TextInput(attrs={'placeholder': _("多个发行方使用英文逗号分隔")}), 'duration': forms.TextInput(attrs={'placeholder': _("毫秒")}), 'cover': PreviewImageInput(), } class AlbumMarkForm(MarkForm): STATUS_CHOICES = [(v, MusicMarkStatusTranslator(v)) for v in MarkStatusEnum.values] status = forms.ChoiceField( label=_(""), widget=forms.RadioSelect(), choices=STATUS_CHOICES ) class Meta: model = AlbumMark fields = [ 'id', 'album', 'status', 'rating', 'text', 'is_private', ] labels = { 'rating': _("评分"), } widgets = { 'album': forms.TextInput(attrs={"hidden": ""}), } class AlbumReviewForm(ReviewForm): class Meta: model = AlbumReview fields = [ 'id', 'album', 'title', 'content', 'is_private' ] labels = { 'album': "", 'title': _("标题"), 'content': _("正文"), 'share_to_mastodon': _("分享到长毛象") } widgets = { 'album': forms.TextInput(attrs={"hidden": ""}), }