Django Фильтр Rest Framework - Выберите правильный выбор - PullRequest
0 голосов
/ 07 марта 2020

Я столкнулся с такой ошибкой при использовании django фильтра рамки отдыха.
Я хочу вернуть 0, возможно ли это исправить?

# http://localhost:8000/api/v1/target/?project=TEST-00002

# RESPONSE 400 Bad Request
{
    "project": [
        "Select a valid choice. That choice is not one of the available choices."
    ]
}

Определения и контрольные примеры приведены ниже.

## Definition

class Project(models.Model):
  project_number = models.CharField(max_length=255, unique=True, null=False, blank=False)
  project_name = models.CharField(max_length=255, null=False, blank=False)

class Target(models.Model):
  project = models.ForeignKey(Project,
                              db_column='project_number',
                              to_field='project_number',
                              on_delete=models.CASCADE,
                              null=False,
                              default=None)
  target_name = models.CharField(max_length=255, null=False, default='')
  comment = models.TextField(default='', blank=True, null=False)


class TargetViewSet(viewsets.ModelViewSet):
  queryset = Target.objects.all()
  serializer_class = TargetSerializer
  filter_backends = (filters.DjangoFilterBackend,)
  filterset_fields = ['id', 'project']

class TargetSerializer(serializers.ModelSerializer):
  class Meta:
    model = Target
    fields = '__all__'
    read_only_fields = ('created_at', 'updated_at', 'delete_at')
## TEST DATA
{
    "hits": {
        "total": 2,
        "next": null,
        "previous": null,
        "hits": [
            {
                "id": 1,
                "project": "TEST-00001",
                "target_name": "bob"
            },
            {
                "id": 2,
                "project": "TEST-00001",
                "target_name": "mary"
            }
        ]
    }
}
## TEST


## http://localhost:8000/api/v1/target/?project=TEST-00002
## 400 bad request
{
    "project": [
        "Select a valid choice. That choice is not one of the available choices."
    ]
}

## http://localhost:8000/api/v1/target/?project=TEST-00001
## no problem
{
    "hits": {
        "total": 2,
        "next": null,
        "previous": null,
        "hits": [
            {
                "id": 1,
                "project": "TEST-00001",
                "target_name": "bob"
            },
            {
                "id": 2,
                "project": "TEST-00001",
                "target_name": "mary"
            }
        ]
    }
}

## http://localhost:8000/api/v1/target/?id=1
## no problem
{
    "hits": {
        "total": 1,
        "next": null,
        "previous": null,
        "hits": [
            {
                "id": 1,
                "project": "TEST-00001",
                "target_name": "bob"
            }
        ]
    }
}

## http://localhost:8000/api/v1/target/?id=0
## no problem(But why is project useless?)
{
    "hits": {
        "total": 0,
        "next": null,
        "previous": null,
        "hits": []
    }
}


## http://localhost:8000/api/v1/target/?project=TEST-00003
## no problem
{
    "hits": {
        "total": 0,
        "next": null,
        "previous": null,
        "hits": []
    }
}

Насколько я понимаю, это событие происходит при следующих условиях.

  • сбой: не существует код (TEST-00002) в родительском.
  • success: существует код (TEST-00003) в родительском.

спасибо.

...