3

Django rest-framework に基づいて REST API アプリを作成しています。モデル データを JSON 形式で返したい

私のモデルは次のとおりです。

from os import path
from django.db import models
from django.contrib import admin
from django.core.files.storage import FileSystemStorage

#------------------------------------------------------------------------------ 

projectDirPath = path.dirname(path.dirname(__file__)) 
storeImageDir = FileSystemStorage(location=projectDirPath + '/couponRestApiApp/stores')


class tags(models.Model):
    """ This is the tag model """
    tag = models.CharField(max_length=15)               # Tag name
    tagDescription = models.TextField()                 # Tag Description
    tagSlug = models.CharField(max_length=400)          # Extra info can be added to the existing tag using this field
    createdAt = models.DateTimeField(auto_now_add=True) # Time at which tag is created
    updatedAt = models.DateTimeField(auto_now=True)     # Time at which tag is updated
    
    def __unicode__(self):
        """Method to display string correctly"""
        return unicode(self.tag)
    class Meta:
        """Meta class to control display Behavior of the Model name """
        verbose_name_plural = "Tags"


class stores(models.Model):
    """ This is the store model """
    storeName = models.CharField(max_length=15)                                          # Store Name
    storeDescription = models.TextField()                                                # Store Description
    storeURL = models.URLField()                                                         # Store URL
    storePopularityNumber = models.IntegerField(max_length=1)                            # Store Popularity Number  
    storeImage = models.ImageField(upload_to="images")                                   # Store Image 
    storeSlug = models.CharField(max_length=400)                                         # This is the text you see in the URL
    createdAt = models.DateTimeField(auto_now_add=True)                                  # Time at which store is created
    updatedAt = models.DateTimeField(auto_now=True)                                      # Time at which store is updated
    storeTags = models.ManyToManyField(tags)                                             # All the tags associated with the store
    
    def __unicode__(self):
        """Method to display string correctly"""
        return unicode(self.storeName)
    def StoreTags(self):
        return '\n'.join([s.tag for s in self.storeTags.all()])
    def StoreImage(self):    
        return '<img src="/media/couponRestApiApp/stores/%s" height="150"/>' % (self.storeImage)
    StoreImage.allow_tags = True
    class Meta:
        """Meta class to control display Behavior of the Model name """
        verbose_name_plural = "Stores"

    
class coupons(models.Model):
    """ This is the coupon model """
    couponValue = models.CharField(max_length=4)                              # Coupon value in RS.
    couponDescription = models.TextField()                                    # Coupon Description
    couponURL = models.URLField()                                             # Coupon click URL
    couponStore = models.ForeignKey(stores)                                   # Key of coupon to store
    tagName = models.ForeignKey(tags,on_delete=models.PROTECT)                # Tag names associated to coupon
    success = models.TextField()                                              # Count of the number of times people have made it work
    failures =  models.TextField()                                            # Count of the number of times this has failed
    lastTested = models.DateTimeField(auto_now=True)                          # When was the coupon last tested
    createdAt = models.DateTimeField(auto_now_add=True)
    updatedAt = models.DateTimeField(auto_now=True)
    class Meta:
        """Meta class to control display Behavior of the Model name """
        verbose_name_plural = "Coupons"


class app(models.Model):
    """ This is the application model which is using the API """
    appName = models.CharField(max_length=20)                       # Application name
    appDomain = models.CharField(max_length=20)                     # Application description
    appKey =  models.TextField()                                    # Application Key 
    createdAt = models.DateTimeField(auto_now_add=True)             # Time at which Application is added is created
    updatedAt = models.DateTimeField(auto_now=True)                 # Time at which Application details are updated
    class Meta:
        """Meta class to control display Behavior of the Model name """
        verbose_name_plural = "Apps"



class subscriptions(models.Model):    
    """ These are the emails that are subscribing """  
    app =  models.CharField(max_length=20)                                # The application where the email came from
    store = models.CharField(max_length=20)                               # The optional store on which the email wants an update
    tag =   models.CharField(max_length=20)                               # The optional tag on which the email wants an update
    emailID = models.EmailField()                                         # EmailID of the registered user
    active =  models.BooleanField(default=True)                           # They may have unsubscribed
    createdAt = models.DateTimeField(auto_now_add=True)                   # Time at user subscribed to the alerts
    updatedAt = models.DateTimeField(auto_now=True)                       # Time at which user updated its subscription 
    class Meta:
        """Meta class to control display Behavior of the Model name """
        verbose_name_plural = "Subscriptions"     


class tagsAdmin(admin.ModelAdmin):
    list_display = ('tag', 'tagDescription', 'tagSlug')


class storesAdmin(admin.ModelAdmin):
    list_display = ('storeName','storeDescription','storeURL',
                    'storePopularityNumber','StoreImage',
                    'storeSlug','createdAt','createdAt','StoreTags'
                    )

class couponsAdmin(admin.ModelAdmin):
    list_display = ('couponValue','couponDescription','couponValue',
                    'couponURL', 'couponStore','tagName','success',
                    'failures','createdAt','updatedAt'
                    )
    
class appsAdmin(admin.ModelAdmin):
    list_display = ('appName','appDomain','appKey',
                    'createdAt','updatedAt'                    
                    )
    

class subcriptionsAdmin(admin.ModelAdmin):
    list_display = ('app','store','tag','emailID',
                    'active','createdAt','updatedAt'
                    )

admin.site.register(tags,tagsAdmin)
admin.site.register(stores,storesAdmin)
admin.site.register(coupons,couponsAdmin)
admin.site.register(app,appsAdmin)
admin.site.register(subscriptions,subcriptionsAdmin)

#------------------------------------------------------------------------------ 

私は自分のviews.pyにクラスを次のように書きました:

from rest_framework import status
from rest_framework.views import View
from rest_framework.response import Response
from couponRestApiApp.models import app,coupons,stores,subscriptions,tags

-------------------------------------------------- ----------------------------

class getAllStores(View):
    """
    Provides access to all orders within the system.
    """
 
 
    def get(self, request):
        """
        Return a list of all orders.
        """ 
        storeResponse = [i.storeName for i in stores.objects.all()]
        print storeResponse
        return (storeResponse)

そして、私の URL.py は次のとおりです。

from django.contrib import admin
from couponRestApiApp.views import getAllStores
from django.conf.urls import patterns, include, url
#------------------------------------------------------------------------------

admin.autodiscover()

urlpatterns = patterns('',

    url(r'^admin/', include(admin.site.urls)),
    url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
         {'document_root': "/home/vaibhav/TRAC/coupon-rest-api/couponRestApi/", 'show_indexes': False}),
    url(r'^stores/$',getAllStores.as_view(), name='getAllStores'),
)

でもリクエストしたら(http://localhost:8000/stores/) the following error is thrown:'list' object has no attribute 'status_code'

rest-framework を使用してモデルデータを JSON オブジェクトにシリアル化する方法を教えてください....

4

2 に答える 2

3

Responseリストを返すだけでなく、を返す必要があります。

ret = [i.storeName for i in stores.objects.all()]
return Response(ret)
于 2013-04-16T13:01:14.877 に答える