【发布时间】:2016-05-04 07:57:15
【问题描述】:
我已经定义了模型如下
from django.db import models
# Create your models here.
class Customer(models.Model):
cust_firstname=models.TextField(max_length=50)
cust_lastname=models.TextField(max_length=50)
cust_company=models.TextField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
cust_contact_number = models.IntegerField()
cust_email = models.TextField(max_length=100)
cust_address=models.TextField(max_length=200,default=None)
def __unicode__(self):
return self.cust_firstname
class Employee(models.Model):
employee_firstname = models.TextField(max_length=50)
employee_lastname = models.TextField(max_length=50)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
employee_contact_number = models.IntegerField()
employee_email = models.TextField(max_length=100)
employee_designation = models.TextField(max_length=50)
employee_address=models.TextField(max_length=200, default=None)
def __unicode__(self):
return self.employee_firstname
class ProjectDetails(models.Model):
customer = models.ForeignKey(Customer)
employee=models.ForeignKey(Employee)
project_name = models.TextField(max_length=50)
project_startdate = models.DateField(auto_now=False, default=None)
project_status = models.TextField(default="Initial")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.project_name
而我的序列化器如下图
from ProjectTemplate.models import Customer, Employee, ProjectDetails
from rest_framework import serializers
class CustomerSerializers(serializers.ModelSerializer):
class Meta:
model=Customer
fields = ('id','cust_firstname','cust_lastname','cust_company','created_at','updated_at','cust_contact_number','cust_email','cust_address')
read_only_fields = ('created_at', 'updated_at')
class EmployeeSerializer(serializers.ModelSerializer):
class Meta:
model=Employee
fields = ('id','employee_firstname','employee_lastname','created_at','updated_at','employee_contact_number','employee_email','employee_designation','employee_address')
read_only_fields = ('created_at', 'updated_at')
class ProjectDetailsSerializer(serializers.ModelSerializer):
#customer = CustomerSerializers(read_only=True)
#employee = EmployeeSerializer(read_only=True)
customer = serializers.SlugRelatedField(slug_field='cust_firstname', read_only=True)
employee = serializers.SlugRelatedField(slug_field='employee_firstname', read_only=True)
class Meta:
model = ProjectDetails
fields = ('id','project_name','project_startdate','created_at','updated_at','project_status','customer','employee')
read_only_fields = ('created_at', 'updated_at')
我在视图中的 POST 方法是
from django.http import Http404
from ProjectTemplate.models import ProjectDetails, Customer, Employee
from ProjectTemplate.serializers import ProjectDetailsSerializer, CustomerSerializers, EmployeeSerializer
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
class ProjectViewSet(viewsets.ModelViewSet):
queryset = ProjectDetails.objects.all()
serializer_class = ProjectDetailsSerializer
def perform_create(self, serializer):
custid = self.request.data.get("customer_id")
empid = self.request.data.get("employee_id")
serializer.save(
customer=Customer.objects.get(pk=custid),
employee=Employee.objects.get(pk=empid))
def perform_update(self, serializer):
custid = self.request.data.get("customer_id")
empid = self.request.data.get("employee_id")
serializer.save(
customer=Customer.objects.get(pk=custid),
employee=Employee.objects.get(pk=empid))
def perform_destroy(self, instance):
instance = self.get_object()
instance.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
当我尝试发布请求时,我收到完整性错误。 代码不会保存对象,因为它没有获取 customer_id 外键值。请找到随附的屏幕截图。有人可以帮我知道序列化方法有什么问题吗?
【问题讨论】:
-
我已经使用 Django rest framework 3.0 重命名了我
-
您在此视图中发布什么数据?
-
JSON 请求我从 chrome postman 开发者工具发布它
标签: django python-2.7 django-rest-framework