【发布时间】:2015-10-11 06:35:51
【问题描述】:
我将 Django 1.8.2 与 python 2.7.3、rest 框架和 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 正常 内容类型:应用程序/json 变化:接受 允许:GET、HEAD、OPTIONS
{ “计数”:0, “下一个”:空, “上一个”:空, “结果”: [] }
【问题讨论】:
-
您为什么要通过 OneToOne 字段进行操作? docs.djangoproject.com/en/1.8/topics/auth/customizing/… ...如果您使用 onetoone 方法,则无法直接访问基本模型上的字段(例如
username),听起来您当前正在创建 django authUser而没有创建关联的 @987654328 @ -
因为我正在尝试获取用户的字段。我应该从 AbstractBaseUser 继承吗? AbstractBaseUser ?
-
是的,改为扩展
AbstractUser,它会让一切变得更容易。记得设置AUTH_USER_MODEL设置docs.djangoproject.com/en/1.8/topics/auth/customizing/…
标签: python json django django-rest-framework django-allauth