python - 使用 django 序列化程序将数据保存在数据库中的更好方法

标签 python django django-rest-framework

您好,我正在做一个正在制作序列化程序的项目
我使用 postman 发送帖子请求。这工作正常,但这只是应用程序的一小部分,代码会变得非常大。如果有更好的方法来编写更小的代码,那么我想使用它。
现在我保存信息的方式如下
模型.py

class Services(models.Model):
    business = models.ForeignKey(Business, on_delete=models.CASCADE)
    service = models.CharField(max_length=30, blank=True)
序列化程序.py
class ServiceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Services
        fields = ('id', 'business', 'service')
View .py
class ServiceAPIView(APIView):
    permission_classes = [IsAuthenticated]

    def post(self, request):
        data = request.data

        business = Business.objects.get(user=request.user)
        data['business'] = business.pk
        serializer = BusinessSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_200_OK)

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
网址.py
urlpatterns = [
    path('service/', ServiceAPIView.as_view()),
]
已编辑 *
这是商业模式
class Business(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    business_name = models.CharField(max_length=50, blank=True)

    invoices_terms = models.TextField(max_length=100, blank=True)
    desc = models.TextField(max_length=1000, blank=True)

    website = models.URLField(max_length=200, blank=True)

    tax_percentage = models.DecimalField(blank=True, max_digits=5, decimal_places=3)
    labour_rate_per_hour = models.DecimalField(blank=True, max_digits=5, decimal_places=2)

    tax_hst_number = models.IntegerField(blank=True)

最佳答案

好吧,代码看起来不错,拥有深度模块也可以。
一些更新可能如下:

class ServiceAPIView(APIView):
    permission_classes = [IsAuthenticated,]
    serializer_class = ServiceSerializer
    def post(self, request):
        data = request.data
        business = Business.objects.get(user=request.user)
        data['business'] = business.pk
        serializer = self.get_serializer(data=data)
        serializer.is_valid(raise_exception=True):
        serializer.save()
        return Response(serializer.data, status=status.HTTP_200_OK)
这样你可以为每个 View 请求方法只写一个响应行,避免使用 if/else 语句

关于python - 使用 django 序列化程序将数据保存在数据库中的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68113416/

相关文章:

python - NumPy:不正确地创建二维数组

django - 懒惰引用:不提供模型用户?

python - 登录后如何重定向到用户请求的 url - Django loginrequiredmixin

python - 将 header 值传递给 django 中的 get 请求

django - put 方法不适用于 RetrieveUpdateDestroyAPIView Django Rest Framework Angular

python - 如何使用正则表达式(TextFSM 模板)单独匹配单行 CLI 输出 (LLDP) 的三个独立部分

python - 无论级别设置如何,如何始终将日志消息写入文件

python - 在我的代码中遇到错误,但我无法确定原因。 (getpixel() 接受 2 个位置参数,但给出了 3 个)

javascript - 投票功能 "No Eintrag matches the given query"

jquery - Django REST框架和Backbone.js文件上传问题