django-ninja
django-ninja copied to clipboard
[BUG] Order of operations affect response and request schemas
- 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
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
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.