diff --git a/api/views.py b/api/views.py index e8fc069c..65d576c0 100644 --- a/api/views.py +++ b/api/views.py @@ -305,3 +305,63 @@ def get_serializer_class(self): if self.request.method not in permissions.SAFE_METHODS: return CostumeSerializerForEditing return CostumeSerializer + +############################################################ +# Item + +class ItemSerializer(MagiSerializer): + image = ImageField() + i_type = IField(models.Item, 'type', required=False) + + class Meta: + model = models.Item + fields = ('id', 'name', 'image', 'i_type', 'm_description') + +class ItemViewSet(viewsets.ModelViewSet): + queryset = models.Item.objects.all() + serializer_class = ItemSerializer + permission_classes = (api_permissions.IsStaffOrReadOnly, ) + +############################################################ +# AreaItem + +class AreaItemSerializer(MagiSerializer): + image = ImageField() + i_type = IField(models.AreaItem, 'type', required=False) + i_instrument = IField(models.AreaItem, 'instrument', required=False) + i_attribute = IField(models.AreaItem, 'attribute', required=False) + i_stat = IField(models.AreaItem, 'stat', required=False) + + class Meta: + model = models.AreaItem + fields = ('id', 'name', 'image', 'area', 'i_type', 'i_instrument', 'member', 'i_attribute', 'i_stat', 'values', 'lifes', 'about') + save_owner_on_creation = True + +class AreaItemViewSet(viewsets.ModelViewSet): + queryset = models.AreaItem.objects.all() + serializer_class = AreaItemSerializer + permission_classes = (api_permissions.IsStaffOrReadOnly, ) + +############################################################ +# Asset + +class AssetSerializer(MagiSerializer): + image = ImageField(required=False) + english_image = ImageField(required=False) + taiwanese_image = ImageField(required=False) + korean_image = ImageField(required=False) + i_type = IField(models.Asset, 'type', required=True) + i_band = IField(models.Asset, 'band', required=False) + c_tags = CField(models.Asset, 'tags', required=False) + + class Meta: + model = models.Asset + save_owner_on_creation=True + many_to_many_fields = ('members',) + fields = ('id', 'i_type', 'image', 'english_image', 'taiwanese_image', 'korean_image', + 'name', 'i_band', 'members', 'c_tags', 'event', 'value', 'source', 'source_link', 'song') + +class AssetViewSet(viewsets.ModelViewSet): + queryset = models.Asset.objects.all().prefetch_related('members') + serializer_class = AssetSerializer + permission_classes = (api_permissions.IsStaffOrReadOnly, ) diff --git a/bang/forms.py b/bang/forms.py index 6c444ab5..02c7a2a4 100644 --- a/bang/forms.py +++ b/bang/forms.py @@ -937,7 +937,7 @@ class ItemFilterForm(MagiFiltersForm): class Meta(MagiFiltersForm.Meta): model = models.Item - fields = ('search', ) + fields = ('search', 'i_type') ############################################################ #CollectibleAreaItem form diff --git a/bang/magicollections.py b/bang/magicollections.py index f151b3dc..798ca438 100644 --- a/bang/magicollections.py +++ b/bang/magicollections.py @@ -2118,14 +2118,19 @@ class ListView(cls.ListView): class ItemView(cls.ItemView): def to_fields(self, item, extra_fields=None, *args, **kwargs): if extra_fields is None: extra_fields = [] + if item.item.i_type != None: + extra_fields.append(('type', { + 'verbose_name': _('Type'), + 'value': item.item.t_type, + 'icon': 'category', + },)) extra_fields.append(( 'item_details', { 'verbose_name': item.item.t_name, 'value': (False, item.item.t_m_description if item.item.m_description else ''), 'type': 'markdown', - 'image': item.item.image_url, - }, - )) + 'icon': 'present', + },)) fields = super(_CollectibleItemCollection.ItemView, self).to_fields( item, *args, icons=COLLECTIBLEITEM_ICON, extra_fields=extra_fields, **kwargs) @@ -2144,7 +2149,7 @@ class ItemCollection(MagiCollection): plural_title = _('Items') queryset = models.Item.objects.all() translated_fields = ('name', 'm_description', ) - icon = 'star' + icon = 'archive' navbar_link = False multipart = True form_class = forms.ItemForm @@ -2175,9 +2180,10 @@ class ItemView(MagiCollection.ItemView): def to_fields(self, item, only_fields=None, *args, **kwargs): if not only_fields: - only_fields = ['m_description'] - fields = super(ItemCollection.ItemView, self).to_fields(item, *args, only_fields=only_fields, **kwargs) - setSubField(fields, 'description', key='image', value=item.image_url) + only_fields = ['i_type', 'm_description'] + fields = super(ItemCollection.ItemView, self).to_fields(item, *args, + only_fields=only_fields, icons={'type': 'category', 'description': 'present',}, **kwargs) +## setSubField(fields, 'description', key='image', value=item.image_url) setSubField(fields, 'description', key='verbose_name', value=unicode(item)) return fields @@ -2250,14 +2256,14 @@ def to_fields(self, item, extra_fields=None, *args, **kwargs): extra_fields.append(('type', { 'verbose_name': _('Area'), 'value': item.areaitem.t_type if item.areaitem.instrument == None else string_concat(item.areaitem.t_type, ' (', item.areaitem.t_instrument, ')'), - 'icon': 'town', + 'icon': 'pinpoint', })) extra_fields.append(( 'item_details', { 'verbose_name': item.formatted_name, 'value': item.formatted_description, 'type': 'long_text', - 'icon': 'present', + 'icon': 'fountain', }, )) fields = super(_CollectibleAreaItemCollection.ItemView, self).to_fields( @@ -2294,7 +2300,7 @@ class AreaItemCollection(MagiCollection): plural_title = _('Area items') queryset = models.AreaItem.objects.all() translated_fields = ('name', 'about') - icon = 'present' + icon = 'town' navbar_link = False multipart = True filter_cuteform = AREA_ITEM_CUTEFORM @@ -2326,13 +2332,13 @@ def to_fields(self, item, *args, **kwargs): fields += [('type', { 'verbose_name': _('Area'), 'value': item.t_type if item.instrument == None else string_concat(item.t_type, ' (', item.t_instrument, ')'), - 'icon': 'town', + 'icon': 'pinpoint', })] fields += [('item_details', { 'verbose_name': item.formatted_name, 'value': item.formatted_description, 'type': 'long_text', - 'icon': 'present', + 'icon': 'fountain', })] if item.about != None: fields += [('about', { diff --git a/bang/models.py b/bang/models.py index 931457d9..57e92e31 100644 --- a/bang/models.py +++ b/bang/models.py @@ -1472,7 +1472,6 @@ def __unicode__(self): class Item(MagiModel): collection_name = 'item' - owner = models.ForeignKey(User, related_name='added_items') _original_image = models.ImageField(null=True, upload_to=uploadTiny('items')) @@ -1482,6 +1481,14 @@ class Item(MagiModel): NAMES_CHOICES = ALL_ALT_LANGUAGES d_names = models.TextField(_('Title'), null=True) + TYPE_CHOICES=[ + ('main', _('Main')), + ('boost', _('Live Boost')), + ('ticket', _('Studio Ticket')), + ('other', _('Other')), + ] + i_type = models.PositiveIntegerField(_('Type'), choices=i_choices(TYPE_CHOICES), null=True) + m_description = models.TextField(_('Description'), null=True) M_DESCRIPTIONS_CHOICES = ALL_ALT_LANGUAGES d_m_descriptions = models.TextField(_('Description'), null=True) @@ -1497,9 +1504,8 @@ class CollectibleItem(AccountAsOwnerModel): account = models.ForeignKey(Account, verbose_name=_('Account'), related_name='items') item = models.ForeignKey(Item, verbose_name=_('Item'), related_name='collectedby') - quantity = models.PositiveIntegerField(_('Quantity'), default=1) - + image = property(lambda _s: _s.item.image) image_url = property(lambda _s: _s.item.image_url) http_image_url = property(lambda _s: _s.item.http_image_url) @@ -1533,7 +1539,6 @@ def __unicode__(self): class AreaItem(MagiModel): collection_name = 'areaitem' - owner = models.ForeignKey(User, related_name='added_area_items') _original_image = models.ImageField(null=True, upload_to=uploadTiny('areas/items')) @@ -1543,7 +1548,7 @@ class AreaItem(MagiModel): NAMES_CHOICES = ALL_ALT_LANGUAGES d_names = models.TextField(_('Title'), null=True) - area = models.ForeignKey(Area, verbose_name=_('Area'), null=True) + area = models.ForeignKey(Area, verbose_name=_('Area'), null=True, on_delete=models.SET_NULL) TYPE_CHOICES=[ ('studio', _('Studio')), diff --git a/bang_project/urls.py b/bang_project/urls.py index eaf35eca..1974708d 100644 --- a/bang_project/urls.py +++ b/bang_project/urls.py @@ -15,6 +15,9 @@ router.register(r'cardids', api_views.CardIDViewSet) router.register(r'events', api_views.EventViewSet) router.register(r'costumes', api_views.CostumeViewSet) +router.register(r'areaitems', api_views.AreaItemViewSet) +router.register(r'assets', api_views.AssetViewSet) +router.register(r'items', api_views.ItemViewSet) urlpatterns = patterns('', url(r'^', include('magi.urls')),