django-ninja icon indicating copy to clipboard operation
django-ninja copied to clipboard

[BUG] Order of operations affect response and request schemas

Open dc-p8 opened this issue 11 months ago • 1 comments

  • Python version: 3.12.2
  • Django version: 4.2.0
  • Django-Ninja version: 1.1.0
  • Pydantic version: 2.5.3

this code

class Author(models.Model):
    name =models.CharField(max_length=255)

class Book(models.Model):
    name=models.CharField(max_length=255)
    author = models.ForeignKey(Author, on_delete=models.CASCADE, null=True, db_index=False)



class BookSchema(ModelSchema):
    class Meta:
        model = Book
        fields = '__all__'

@router.put("/books/{id}/", response=BookSchema)
def put_book(request, pk: int, data: BookSchema):
    return Book.objects.get(id=id)


@router.get("/books/{id}/", response=BookSchema)
def get_book_detail(request, id: int):
    return Book.objects.get(id=id)

gives this schemas image

just change the order of routes

class Author(models.Model):
    name =models.CharField(max_length=255)

class Book(models.Model):
    name=models.CharField(max_length=255)
    author = models.ForeignKey(Author, on_delete=models.CASCADE, null=True, db_index=False)



class BookSchema(ModelSchema):
    class Meta:
        model = Book
        fields = '__all__'
        
        
@router.get("/books/{id}/", response=BookSchema)
def get_book_detail(request, id: int):
    return Book.objects.get(id=id)


@router.put("/books/{id}/", response=BookSchema)
def put_book(request, pk: int, data: BookSchema):
    return Book.objects.get(id=id)

and you get a different schema

image

dc-p8 avatar Mar 10 '24 22:03 dc-p8

when having only a post route

@router.put("/books/{id}/", response=create_schema(Book))
def put_book(request, pk: int, data: BookSchema):
    return Book.objects.get(id=id)    

doest produce the same response schema as

@router.put("/books/{id}/", response=BookSchema)
def put_book(request, pk: int, data: BookSchema):
    return Book.objects.get(id=id)

The inputschema and the response shema should contain author, not author_id.

dc-p8 avatar Mar 11 '24 14:03 dc-p8