【发布时间】:2021-12-17 22:09:31
【问题描述】:
如果我有两个 Django 模型,如下所示,与类别相关的书籍,当使用 Django Rest Framework 使用 PostgreSQL DB 使外键字段在 HTML 中可编辑时,我如何在不使用外键的情况下显示关系形式?
CATEGORIES = [
('Fiction', ('Fiction')),
('Non-Fiction', ('Non-Fiction'))
]
class Category(models.Model):
category_name = models.CharField(max_length=255, choices=CATEGORIES)
class Book(models.Model):
title = models.CharField(max_length=255)
author = models.CharField(max_length=255)
pages = models.IntergerField(max_length=255)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
当book 表中的类别列表示为category_id 时,我的挑战出现在数据库中,它们是整数。这会在执行 CRUD 功能时产生问题,尤其是 EDIT,因为我无法在表单中从前端编辑类别,因为它表示为 1,2,3..... 而不是实际类别。我想通过 REST API 来实现这一点。
我的序列化器
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
我的 API 视图
@api_view(['POST'])
def AddBookAPI(request):
serializer = BookSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@api_view(['PUT'])
def EditBookAPI(request, id):
book_record =get_object_or_404(Book, id=id)
serializer = BookSerializer(instance=book_record, data=request.data)
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_304_NOT_MODIFIED)
@api_view(['DELETE'])
def DeleteBookAPI(request, id):
book = get_object_or_404(Book, id=id)
book.delete()
return Response('Book Record Successfully Deleted!', status=status.HTTP_200_OK)
还有一个示例响应
{
"id": 1,
"title": "The Green Light",
"author": "Peris Fuller",
"pages": 456,
"category": 2,
},
对此的任何帮助将不胜感激。
【问题讨论】:
标签: django postgresql django-rest-framework foreign-keys