【问题标题】:Django REST - create object with PrimaryKeyDjango REST - 使用 PrimaryKey 创建对象
【发布时间】:2017-07-26 16:13:02
【问题描述】:

型号:

class Company(models.Model):
    name = models.CharField(max_length=200, blank=True, default='')
    created = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User, related_name='companies')

    class Meta:
        ordering = ('-created',)

而且我使用的是内置的用户模型

序列化器

class CompanySerializer(serializers.ModelSerializer):

    class Meta:
        model = Company
        fields = ('name', 'created')


class UserSerializer(serializers.ModelSerializer):
    companies = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = User
        fields = ('id', 'username', 'email', 'first_name', 'last_name', 'date_joined', 'is_staff', 'is_active',
                  'is_superuser', 'last_login', 'companies')

查看:

@csrf_exempt
def companies_create(request):
    if request.method == 'POST':
        data = JSONParser().parse(request)
        serializer = CompanySerializer(data=data)
        print(serializer)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)
        return JsonResponse(serializer.errors, status=400)
  • JSON 文件应该如何发送到服务器(是否包含 Company + user_id 模型中的所有字段)?
  • 如何在保存到视图之前附加用户对象?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:
    @csrf_exempt
    def companies_create(request):
    
        user = get_user_from_somewhere()
    
        if request.method == 'POST':
            data = JSONParser().parse(request)
            serializer = CompanySerializer(data=data)
            print(serializer)
            if serializer.is_valid():
    
                serializer.save(user=user)
    
                return JsonResponse(serializer.data, status=201)
            return JsonResponse(serializer.errors, status=400)
    

    【讨论】:

      【解决方案2】:

      使用 django get_user_model

      from django.contrib.auth import get_user_model
      
      user_model = get_user_model()
      
      @csrf_exempt
      def companies_create(request):
      
          user = get_user_from_somewhere()
      
          if request.method == 'POST':
              data = JSONParser().parse(request)
              serializer = CompanySerializer(data=data)
              print(serializer)
              if serializer.is_valid():
      
                  serializer.save(user=user_model)
      
                  return JsonResponse(serializer.data, status=201)
              return JsonResponse(serializer.errors, status=400)
      

      【讨论】:

        猜你喜欢
        • 2017-12-29
        • 1970-01-01
        • 1970-01-01
        • 2013-09-19
        • 2013-08-05
        • 2016-04-23
        • 1970-01-01
        • 2018-12-05
        • 1970-01-01
        相关资源
        最近更新 更多