当尝试在新的Django 1.7中保存用户时,Django Rest Framework显示错误

时间:2014-11-07 11:17:11

标签: python django django-rest-framework

我可以通过版本1.6保存用户,但我决定使用这个新版本的Django创建一个新项目,并且所有代码都是相同的,但是当我尝试使用前端创建一个新用户时(使用Restangular创建) )告诉我一个错误。 DRF API的形式显示相同的错误。它询问了我的详细信息,如date_joined和last_login:O没问题,我写了。但DRF显示: “在使用多对多关系之前,需要为字段”user“设置一个值。

在终端中完美搭配

from django.contrib.auth.models import User
u = User()
u.username="newuser"
u.save()

我有多个像m2m关系一样的模型,如:

class Inscription(models.Model):
    categoria = models.ForeignKey('app.Category')
    user = models.ForeignKey(User, related_name='inscriptions')
    signed_by = models.ForeignKey(User, related_name='inscription_signed_by')
    created_at  = models.DateTimeField(auto_now_add=True)
    udpated_at = models.DateTimeField(auto_now=True) 
    def __unicode__(self):
        return '%s - %s' % (self.categoria.nombre, self.user.first_name)

但这在上一个版本中工作正常,我不知道我做错了什么:( 我使用DRF 2.4.3和Python 3.3.5。 ¿如何让DRF正常工作? 非常感谢你!

编辑: 我使用router.register(r'users',UserViewSet)这样使用它:

class UserViewSet(ModelViewSet):
    model = User
    write_only_fields = ('password',) 
    lookup_field = 'id'

1 个答案:

答案 0 :(得分:5)

您正在使用Python 3和Django REST Framework 2.4运行known bug。问题是多对多关系的行为和getattr在Python 3中是不同的,并且在2.3.14中有一个变化打破了序列化器。

你有两种方法可以解决这个问题,但没有一个方法可以解决这个问题:

  • 将Django REST Framework降级到2.3.13。这将在更改之前将其恢复,并且很容易pip可安装。
  • 升级到Django REST Framework 3.0。 It's not released yet,但如果你不能降级,那就值得一试。