Django остальные рамки, первичный ключ является строка, а не целое число - PullRequest
0 голосов
/ 11 февраля 2019

У меня очень глупая проблема.Все первичные ключи (id) возвращаются в виде строки, но мне нужно целое число.

Django==2.1.5
djangorestframework==3.9.1
djangorestframework-jsonapi==2.7.0

Модель:

class Room(models.Model):
    id = models.IntegerField(primary_key=True)
    creator = models.ForeignKey(
        User,
        verbose_name='Creator',
        on_delete=models.CASCADE
    )
    invited = models.ManyToManyField(
        User,
        verbose_name='Invited',
        related_name='invited_user'
    )
    number_1 = models.IntegerField(
        default=1
    )
    number_2 = models.IntegerField(
        default=2
    )
    number_3 = models.IntegerField(
        default=3
    )
    date = models.DateTimeField('Created at', auto_now_add=True)

    class Meta:
        verbose_name = 'Chat room'
        verbose_name_plural = "Chat rooms"
        db_table = 'room'

Вид:

class Rooms(APIView):
    permission_classes = [permissions.IsAuthenticated]

    @staticmethod
    def get(request):
        # rooms = Room.objects.filter(creator=request.user)
        rooms = Room.objects.all()
        serializer = RoomSerializer(rooms, many=True)
        return Response(serializer.data)

Сериализатор:

class RoomSerializer(serializers.ModelSerializer):
    # id = serializers.IntegerField()
    creator = UserSerializer(read_only=True)
    invited = UserSerializer(many=True, read_only=True)

    class Meta:
        id = serializers.IntegerField(label='ID', read_only=True)
        model = Room
        fields = ['id', 'number_1', 'number_2', 'number_3', 'creator', 'invited', 'date']

Запрос:

{
    "type": "Rooms",
    "id": "3",
    "attributes": {
        "number_1": 1,
        "number_2": 2,
        "number_3": 3,
        "date": "2019-02-08T12:30:39.095971Z"
    },
    "relationships": {
        "creator": {
            "data": {
                "type": "User",
                "id": "6"
            }
        },
        "invited": {
            "data": [
                {
                    "type": "User",
                    "id": "3"
                }
            ]
        }
    }

По запросу ID комнаты и ID пользователя - это строки, но мне нужен целочисленный тип.Если другое поле имеет целочисленные типы (число_1, число_2, число_3), оно возвращается как целое число.Понятия не имею, как это исправить.Спасибо за помощь

1 Ответ

0 голосов
/ 13 февраля 2019

Спасибо всем за помощь, проблема была в настройках.Сначала я просто скопировал их, а затем проник и удалил лишнее.Теперь они выглядят так:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 1,
    # 'DEFAULT_PERMISSION_CLASSES': (
    #     'rest_framework.permissions.IsAdminUser',
    #     'rest_framework.permissions.AllowAny',
    # ),
    # 'DEFAULT_AUTHENTICATION_CLASSES': (
    #     # 'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    #     'rest_framework.authentication.TokenAuthentication',
    #     'rest_framework.authentication.BasicAuthentication',
    #     'rest_framework.authentication.SessionAuthentication',
    # ),
    # 'EXCEPTION_HANDLER': 'rest_framework_json_api.exceptions.exception_handler',
    # 'DEFAULT_PARSER_CLASSES': (
    #     'rest_framework_json_api.parsers.JSONParser',
    #     'rest_framework.parsers.FormParser',
    #     'rest_framework.parsers.MultiPartParser'
    # ),
    # 'DEFAULT_RENDERER_CLASSES': (
    #     'rest_framework_json_api.renderers.JSONRenderer',
    #     'rest_framework.renderers.BrowsableAPIRenderer',
    # ),
    # 'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata',
}
...