Django Rest Framework - 后外键

django

1个回答

写回答

BaeBae.

2025-08-19 23:51

+ 关注

Django
Django

使用Django Rest Framework(DRF)时,我们经常需要处理后外键关系。后外键是指一个模型中的字段引用了另一个模型的关系字段。例如,我们有一个博客应用,其中有两个模型:文章和评论。每篇文章可以有多个评论,因此我们在评论模型中添加一个外键字段,指向文章模型。

首先,让我们创建一个新的Django项目并安装Django Rest Framework。在终端中运行以下命令:

$ pip install Django

$ pip install Djangorestframework

安装完成后,创建一个新的Django项目并启动一个应用程序。假设我们的项目名为"blog",应用程序名为"api":

$ Django-admin startproject blog

$ cd blog

$ Python manage.py startapp api

settings.py文件中,将'Django Rest Framework'添加到INSTALLED_APPS中:

Python

INSTALLED_APPS = [

...

'rest_framework',

'api',

]

接下来,定义我们的模型。在api/models.py文件中,添加以下代码:

Python

from Django.db import models

class Article(models.Model):

title = models.CharField(max_length=100)

content = models.TextField()

def __str__(self):

return self.title

class Comment(models.Model):

article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='comments')

content = models.TextField()

def __str__(self):

return self.content

在上面的代码中,我们定义了两个模型:ArticleCommentArticle模型有一个标题和一段内容,而Comment模型有一段评论内容,并使用ForeignKey字段引用了Article模型。

接下来,我们需要创建序列化器来将模型转换为JSON格式的数据。在api/serializers.py文件中,添加以下代码:

Python

from rest_framework import serializers

from .models import Article, Comment

class CommentSerializer(serializers.ModelSerializer):

class Meta:

model = Comment

fields = '__all__'

class ArticleSerializer(serializers.ModelSerializer):

comments = CommentSerializer(many=True, read_only=True)

class Meta:

model = Article

fields = '__all__'

在上面的代码中,我们定义了两个序列化器:CommentSerializerArticleSerializerCommentSerializer用于序列化评论模型,ArticleSerializer用于序列化文章模型。在ArticleSerializer中,我们使用CommentSerializer作为嵌套序列化器来序列化与文章相关联的评论。

现在,我们需要创建视图来处理API请求。在api/views.py文件中,添加以下代码:

Python

from rest_framework import viewsets

from .models import Article, Comment

from .serializers import ArticleSerializer

class ArticleViewSet(viewsets.ModelViewSet):

queryset = Article.objects.all()

serializer_class = ArticleSerializer

在上面的代码中,我们创建了一个视图集合,使用ModelViewSet类来处理Article模型的CRUD操作。我们指定了查询集和序列化器。

接下来,我们需要配置URL路由。在blog/urls.py文件中,添加以下代码:

Python

from Django.contrib import admin

from Django.urls import path, include

from rest_framework import routers

from api.views import ArticleViewSet

router = routers.DefaultRouter()

router.register(r'articles', ArticleViewSet)

urlpatterns = [

path('admin/', admin.site.urls),

path('api/', include(router.urls)),

]

在上面的代码中,我们使用DefaultRouter类来自动生成URL路由。我们注册了ArticleViewSet视图集合,并将其包含在URL模式中。

现在,我们可以运行开发服务器并测试我们的API。在终端中运行以下命令:

$ Python manage.py runserver

访问http://localhost:8000/api/articles/,您应该能够看到以JSON格式呈现的文章列表。每个文章对象都包含与之关联的评论。

在本文中,我们介绍了如何在Django Rest Framework中处理后外键关系。我们创建了两个模型:文章和评论,并使用外键字段将它们关联起来。我们使用序列化器来将模型转换为JSON格式的数据,并创建了视图来处理API请求。最后,我们配置了URL路由,并通过运行开发服务器来测试我们的API。

这个例子只是DRF中处理后外键关系的一个简单示例,您可以根据自己的需求进行更复杂的配置和扩展。希望本文对您有所帮助!

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号