Платформа django REST не работает, показывает новые поля в модели

Я новичок в Django, я пытаюсь добиться того, чтобы модуль поиска продукта извлекал данные из MySQL и отвечал на запрос GET.

Вот моя модель

models.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",
    }
  ]
}

views.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

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",
    }
  ]
}

person Vignesh A    schedule 13.05.2017    source источник
comment
уверены, что у вас нет настройки кеша?/   -  person e4c5    schedule 13.05.2017
comment
Как насчет очистки кеша браузера, если вы просматриваете на одном...   -  person smurfMT    schedule 13.05.2017
comment
@ e4c5 только что использовал настройки по умолчанию, предоставленные Django, не уверен в настройке кеша.   -  person Vignesh A    schedule 14.05.2017
comment
@smurfMT использовал Postman, я не уверен, что это проблема с кешем. См. мой ответ ниже..   -  person Vignesh A    schedule 14.05.2017


Ответы (3)


Добавьте атрибут fields в метакласс сериализатора,

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

Or,

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

Затем повторите попытку ответа.

ИЗМЕНИТЬ

Проблема, я думаю, что вы смотрите только на объекты ответа, которые создаются до миграции. Я думаю, что объекты в ответе имеют только поля предыдущей миграции. У них нет TITLE или FAV_ICON, поэтому в ответе были только предыдущие поля. Чтобы получить новые поля в ответе, следует создать новые объекты, а затем попытаться запросить ответ, который должен дать соответствующие поля.

Вы также можете указать для полей некоторые значения по умолчанию, если существующие объекты должны иметь эти поля. Значения по умолчанию могут быть назначены в параметрах поля модели. Дополнительные сведения см. в документации Django для справки по полям модели.

Здесь https://docs.djangoproject.com/en/1.11/ref/models/fields/

person zaidfazil    schedule 13.05.2017
comment
Не повезло Фазилю. все тот же ответ - person Vignesh A; 13.05.2017
comment
fields = ('COMPANY_NAME', 'BRAND_NAME', 'BRAND_DESC', 'TITLE', 'FAV_ICON') добавлено, это serializers.py не повезло.. - person Vignesh A; 13.05.2017
comment
Обновлен ответ - person zaidfazil; 13.05.2017
comment
Я только что создал новый бренд с непустыми значениями для FAV_ICON и TITLE., но я не могу получить информацию с метаполями, указанными в serializers.py - person Vignesh A; 13.05.2017
comment
Не могли бы вы показать новый ответ ?? Также весь вид для ответа.. - person zaidfazil; 13.05.2017

В основном ответ @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)

Это объясняется в документации по Rest в разделе 3

person Dawid Dave Kosiński    schedule 13.05.2017
comment
обновил мой views.py до класса BrandList(APIView): def get(self, request, format=None): brands = CNF_BRAND.objects.all() serializer = BrandSerializer(brands, many=True) return Response(serializer.data) Добавлен urls.py с url(r'^brands/$', views.BrandList.as_view()), все равно не повезло..... - person Vignesh A; 13.05.2017
comment
Я рекомендую делать пакет «как» с самого начала. Я думаю, что у вас проблема, о которой вы не упомянули в вопросе, или обычная опечатка. Вы зашли на страницу в режиме инкогнито? другой вариант — обратная миграция через python manage.py migrate APP zero. Нулевой параметр удалит все миграции в конкретном приложении, даже начальные. Затем удалите миграции и снова запустите python manage.py makemigrations APP и python manage.py migrate APP. - person Dawid Dave Kosiński; 15.05.2017

Просто удалил папку миграции и воссоздал базу данных (поскольку она находится на начальном этапе), затем запустил команды

python manage.py makemigrations

python manage.py migrate

Теперь он поддерживает новые добавленные поля.

person Vignesh A    schedule 13.05.2017