【问题标题】:django rest - create object with less fieldsdjango rest - 创建具有较少字段的对象
【发布时间】:2015-11-20 18:03:40
【问题描述】:

我在一个项目中使用 Django Rest Framework。我在序列化器字段中设置了所有 Group 模型属性,所以当我发出 GET 请求时,我会收到所有数据。好的。但是,当一些用户想要创建一个组(POST 方法)时,一旦我在请求中获得用户 ID,这就会成为一个麻烦——这会产生一个错误的请求。

我的模特:

class Group(models.Model):

    class Meta:
         app_label = 'base'

    PRIVACY = Choices(
        ('0', u'Público'),
        ('1', 'Particular'),
        ('2', 'Secreto'),
    )

    name = models.CharField(max_length=62, unique=False)
    privacy = models.CharField(max_length=2, choices=PRIVACY)
    end_date = models.DateTimeField(auto_now_add=True, editable=False)
    date_created = models.DateTimeField(auto_now_add=True, editable=False)
    admin = models.ForeignKey(User, related_name='admin')
    member = models.ManyToManyField(User, through='Membership')

我的序列化器:

class GroupSerializer(serializers.ModelSerializer):

    # admin = serializers.CharField(source='admin.id')

    class Meta:
        model = Group
        fields = ('name', 'privacy', 'status', 'end_date', 'date_created', 'admin')

我的看法:

class GroupList(mixins.ListModelMixin,
               mixins.CreateModelMixin,
               generics.GenericAPIView):

    """
    List all groups, or create a new group.
    """

    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)

    queryset = Group.objects.all()
    serializer_class = GroupSerializer

    def perform_create(self, serializer):
        serializer.save(admin=self.request.user)

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

更新请求示例:

var data = {
    'name': 'New name',
    'privacy': '0',
    'end_date':'2015-12-22 19:53:42',
};

$.ajax({
    url: '/groups/',
    method: 'POST',
    data:data
}).done(function(response) {
   console.log(response);
});

错误:

{"admin":["This field is required."]}

【问题讨论】:

  • 您需要为模型中的管理字段设置null=True
  • 您的数据对象中没有admin_id 变量。

标签: python django django-rest-framework


【解决方案1】:

您可能希望将管理字段设置为read_only

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2011-10-23
    • 2014-07-07
    • 2013-06-04
    • 1970-01-01
    • 2014-10-12
    相关资源
    最近更新 更多