Django Rest API,如何为 2 个模型条目创建 post api,并具有与模型关联的外键

Posted

技术标签:

【中文标题】Django Rest API,如何为 2 个模型条目创建 post api,并具有与模型关联的外键【英文标题】:Django Rest API, how to create post api for 2 model entries, and has foreign key associated to the model 【发布时间】:2018-04-27 03:09:49 【问题描述】:

我正在尝试使用 DRF Django Rest Framework 创建一个发布 API 来为 2 个模型创建条目并关联外键关系。我该如何做到这一点?

我有 2 个模型 - OneToOne 与 User 关联的 Employee 模型,并有一个 ForeignKey 公司 - 公司模式

我想要一个帖子来创建员工模型条目以及公司模型条目并将员工与公司相关联。我还想输入员工数据(用户名、名字、姓氏等)。

以下是代码摘录:

https://gitlab.com/firdausmah/railercom/blob/master/railercomapp/models.py

class Employee(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='employee')
    company = models.ForeignKey(Company)


class Company(models.Model):
    name = models.CharField(max_length=50)
    tel = models.CharField(max_length=15, blank=True)

https://gitlab.com/firdausmah/railercom/blob/master/railercomapp/views.py

class EmployeeWithCompanyCreateView(generics.ListCreateAPIView):
    """This class defines the create behavior of our rest api."""
    queryset = Employee.objects.all()
    serializer_class = EmployeeWithCompanyCreateSerializer

    def perform_create(self, serializer):
        """Save the post data when creating a new bucketlist."""
        serializer.save()

https://gitlab.com/firdausmah/railercom/blob/master/railercom/urls.py

urlpatterns = [
    url(r'^employee/$', EmployeeWithCompanyCreateView.as_view(), name="create"),

https://gitlab.com/firdausmah/railercom/blob/master/railercomapp/serializers.py

class EmployeeWithCompanyCreateSerializer(serializers.ModelSerializer):

    class Meta:
        model = Employee
        fields = ("id","identity_number", "tel")

【问题讨论】:

【参考方案1】:

您当前的解决方案有一些问题:EmployeeWithCompanyCreateSerializer 类的字段列表与 Employee 类的字段不匹配。 在您的问题上下文中,我建议您手动编写复杂的视图。

【讨论】:

以上是关于Django Rest API,如何为 2 个模型条目创建 post api,并具有与模型关联的外键的主要内容,如果未能解决你的问题,请参考以下文章

Django Rest Framework api如何为所有人添加身份验证权限

Django Rest Framework - 如何为所有 ModelSerializer 字段创建自定义错误消息?

如何为来自相关模型的聚合数据实现自定义 django 过滤器

get() 返回了多个模块——它返回了 2 个! (REST API - Django)

使用 django rest 框架,如何为现有父对象添加新的嵌套子对象

如何为 Node JS 设置 REST API