0

我是 Django 新手,我正在尝试实现产品查找模块从 MySQL 获取数据以响应 GET 请求。

这是我的模型

模型.py

class CNF_BRAND(models.Model):
    COMPANY_NAME = models.CharField(max_length=255)
    BRAND_NAME = models.CharField(max_length=255)
    BRAND_DESC = models.CharField(max_length=1024)  

序列化程序.py

class BrandSerializer(serializers.ModelSerializer):
    class Meta:
        model = CNF_BRAND

获取响应

{
  "Status": "SUCCESS",
  "Brand": [
    {
      "COMPANY_NAME": "Test",
      "BRAND_NAME": "Test Brand",
      "BRAND_DESC": "Classic",
    }
  ]
}

视图.py

response_data = {}

brand=CNF_BRAND.objects.all() #Main Cone #Man Goods
serializedProduct = BrandSerializer(brand, many=True)

response_data['Brand'] = serializedProduct.data

response = JsonResponse(response_data, status=status.HTTP_200_OK)
return HttpResponse(response,content_type="application/json")

效果很好。

更新代码

class CNF_BRAND(models.Model):
    COMPANY_NAME = models.CharField(max_length=255)
    BRAND_NAME = models.CharField(max_length=255)
    BRAND_DESC = models.CharField(max_length=1024)  
    TITLE = models.CharField(max_length=21)
    FAV_ICON = models.URLField(max_length=1024)

获取响应

{
  "Status": "SUCCESS",
  "Brand": [
    {
      "COMPANY_NAME": "Test",
      "BRAND_NAME": "Test Brand",
      "BRAND_DESC": "Classic",
    }
  ]
}

获取响应没有变化。我做了

python manage.py makemigrations

python manage.py 迁移

多次重启django服务器

我可以看到数据库中的新字段并更新了字段值。但无法在我的回复中看到新字段。

更新

序列化程序.py

class BrandSerializer(serializers.ModelSerializer):
 PRODUCT = ProductSerializer(many=True)
  class Meta:
   model = CNF_BRAND
   fields = '__all__' 

打印

即使存在上述问题,我也可以在控制台中打印相应的值

print(brand[0].TITLE)
print(brand[0].FAV_ICON)

安慰

My Title
https://www.google.co.in/images/branding/product/ico/googleg_lodp.ico

Rest客户端未收到响应

获取响应

{
  "Status": "SUCCESS",
  "Brand": [
    {
      "COMPANY_NAME": "Test",
      "BRAND_NAME": "Test Brand",
      "BRAND_DESC": "Classic",
    }
  ]
}
4

3 回答 3

2

向序列化程序的元类添加字段属性,

fields = [f.name for f in self.fields]

或者,

fields = ('COMPANY_NAME', 'BRAND_NAME', 'BRAND_DESC', 'TITLE', 'FAV_ICON')

然后再次尝试响应。

编辑

问题我认为您只查看在迁移之前创建的响应对象。我认为响应中的对象只有上一次迁移中的字段。他们没有 TITLE 或 FAV_ICON,这就是为什么响应只有前面的字段。为了获得响应中的新字段,您应该创建新对象,然后尝试请求响应,这应该提供适当的字段。

如果现有对象需要具有这些字段,您还可以为这些字段提供一些默认值。可以在模型字段选项中分配默认值。有关更多详细信息,请参阅模型字段参考的 Django 文档。

这里 https://docs.djangoproject.com/en/1.11/ref/models/fields/

于 2017-05-13T11:32:03.077 回答
0

刚刚删除了迁移文件夹并重新创建了数据库(因为它处于初始阶段)然后运行了命令

python manage.py makemigrations

python manage.py migrate

现在它支持更多新添加的字段

于 2017-05-13T19:47:42.743 回答
0

基本上@Fazil_Zaid 的答案是正确的。也许你的观点是错误的。您正在使用 modelSerializer,因此您可以编写 APIView 视图,例如:

class FlightList(APIView):
    u"""View of flights."""

    def perform_create(self, serializer):
        u"""Pre-create method."""
        serializer.save(added_by=self.request.user)

    def get(self, request, format=None):
        u"""Get flights on HTTP GET."""
        flights = Flight.objects.all()
        serializer = FlightSerializer(flights, many=True)
        return Response(serializer.data)

这在第 3 节的 Rest 文档中进行了解释

于 2017-05-13T12:33:17.013 回答