我使用Django 1.8.2和python 2.7.3,休息框架和allauth。我试图扩展django.contrib.auth.models.User以添加自定义字段,但返回的json为空并且创建了用户:
在models.py
from django.contrib.auth.models import User
from django.db import models
class MyUser(models.Model):
user = models.OneToOneField(User)
black_coffee = models.IntegerField(default=0)
coffee_with_milk = models.IntegerField(default=0)
coffee_cut = models.IntegerField(default=0)
在serializers.py
from rest_framework import serializers
from cafeterias.models import MyUser
class UserSerializer(serializers.HyperlinkedModelSerializer):
# snippets = serializers.HyperlinkedRelatedField(many=True, view_name='snippet-detail', read_only=True)
class Meta:
model = MyUser
fields = ('username', 'black_coffee', 'coffee_with_milk', 'coffee_cut')
在views.py
中from cafeterias.models import MyUser
from rest_framework import permissions
from rest_framework import viewsets
class UserViewSet(viewsets.ReadOnlyModelViewSet):
queryset = MyUser.objects.all()
serializer_class = UserSerializer
permission_classes = (permissions.AllowAny,
IsOwnerOrReadOnly,)
以下是json的结果:
HTTP 200 OK Content-Type:application / json 变化:接受 允许:GET,HEAD,OPTIONS
{ "计数":0, " next":null, "之前":null, "结果":[] }
答案 0 :(得分:5)
您没有正确地扩展User
模型。
要使用额外字段扩展User
模型,我们可以使用AbstractUser
模型。这将为我提供User
,username
等所有email
字段。现在,我们可以在MyUser
模型中添加所有额外字段。
我们需要做类似的事情:
<强> models.py 强>
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
black_coffee = models.IntegerField(default=0)
coffee_with_milk = models.IntegerField(default=0)
coffee_cut = models.IntegerField(default=0)
这将提供所有User
字段以及MyUser
模型中的3个额外字段。
答案 1 :(得分:0)
这应该只是一个评论,但我没有足够的声誉来发表评论。
在我看来,您需要的是用户个人资料模型。 Here你可以看到它是如何完成的。请注意post_save.connect(...)
电话。每次创建新用户时都需要自动创建新的个人资料,而这似乎正是您所缺少的。