【发布时间】:2017-05-16 14:31:30
【问题描述】:
我是 Django 1.9 的新手,Rest Framework 我有一个 models.py 如下:
class UniservedTeam(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
Role = ArrayField(models.CharField(max_length=1000), blank=True,null=True)
ContactNumber = models.CharField(max_length=100)
我试过的是:-
from rest_framework import serializers
from django.contrib.auth.models import User
from models import UniservedTeam
class UniservedTeamSerializer(serializers.ModelSerializer):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
Role = ArrayField(models.CharField(max_length=1000), blank=True,null=True)
ContactNumber = serializers.CharField(max_length=100)
class Meta:
model = User
fields = ('id', 'username', 'password', 'first_name', 'last_name', 'email', 'city')
对于Id 和Role 字段,我应该使用哪些序列化程序的方法?
如何为 post 和 get 方法编写序列化程序?
如果我从序列化程序中删除“id”和“角色”字段,如下所示:-
class UniservedTeamSerializer(serializers.ModelSerializer):
# city = serializers.CharField(source=UniservedTeam.city)
# id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
# Role = ArrayField(models.CharField(max_length=1000), blank=True,null=True)
ContactNumber = serializers.CharField(source='UniservedTeam.ContactNumber')
class Meta:
model = User
fields = ('id', 'username', 'password', 'first_name', 'last_name', 'email', 'ContactNumber')
我的shell输出如下:
>>> from projectmanagement.serializers import UniservedTeamSerializer
>>> users = UniservedTeam.objects.all()
>>> serializer = UniservedTeamSerializer(users, many=True)
>>> serializer
UniservedTeamSerializer([<UniservedTeam: UniservedTeam object>], many=True):
id = IntegerField(label='ID', read_only=True)
username = CharField(help_text='Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=30, validators=[<django.core.validators.RegexValidator object>, <UniqueValidator(queryset=User.objects.all())>])
password = CharField(max_length=128)
first_name = CharField(allow_blank=True, max_length=30, required=False)
last_name = CharField(allow_blank=True, max_length=30, required=False)
email = EmailField(allow_blank=True, label='Email address', max_length=254, required=False)
ContactNumber = CharField(source='UniservedTeam.ContactNumber')
错误:-
>>> serializer.data
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/piyush/.environments/awsd/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 674, in data
ret = super(ListSerializer, self).data
File "/home/piyush/.environments/awsd/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 239, in data
self._data = self.to_representation(self.instance)
File "/home/piyush/.environments/awsd/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 614, in to_representation
self.child.to_representation(item) for item in iterable
File "/home/piyush/.environments/awsd/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 463, in to_representation
attribute = field.get_attribute(instance)
File "/home/piyush/.environments/awsd/local/lib/python2.7/site-packages/rest_framework/fields.py", line 422, in get_attribute
raise type(exc)(msg)
AttributeError: Got AttributeError when attempting to get a value for field `username` on serializer `UniservedTeamSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `UniservedTeam` instance.
Original exception text was: 'UniservedTeam' object has no attribute 'username'.
【问题讨论】:
标签: django django-models django-serializer