您好,我正在做一个正在制作序列化程序的项目
我使用 postman 发送帖子请求。这工作正常,但这只是应用程序的一小部分,代码会变得非常大。如果有更好的方法来编写更小的代码,那么我想使用它。
现在我保存信息的方式如下
模型.py
class Services(models.Model):
business = models.ForeignKey(Business, on_delete=models.CASCADE)
service = models.CharField(max_length=30, blank=True)
序列化程序.pyclass ServiceSerializer(serializers.ModelSerializer):
class Meta:
model = Services
fields = ('id', 'business', 'service')
View .pyclass 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)
网址.pyurlpatterns = [
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/