我User保存了两个不同的模型,UserProfile并且User.现在从API的角度来看,没有人真正关心这两者是不同的.
所以我在这里:
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'first_name', 'last_name', 'email')
Run Code Online (Sandbox Code Playgroud)
和
class UserPSerializer(serializers.HyperlinkedModelSerializer):
full_name = Field(source='full_name')
class Meta:
model = UserProfile
fields = ('url', 'mobile', 'user','favourite_locations')
Run Code Online (Sandbox Code Playgroud)
所以在UserPSerializer该领域user只是该资源的链接.但从用户的角度来看,根本没有理由让他知道User.
是否有一些技巧可以将它们混合在一起并作为一个模型呈现给用户,或者我必须以某种方式手动执行此操作.
我正在使用默认的 User 模型,并且还使用 UserExtended 模型对其进行了扩展:
class Country(models.Model):
countryName = models.CharField(max_length=50, unique=True)
countryCode = models.CharField(max_length=10, unique=True)
class UserExtended(models.Model):
user = models.OneToOneField(User, related_name="userextended")
country = models.ForeignKey(Country)
Run Code Online (Sandbox Code Playgroud)
我正在尝试遵循此处记录的内容:http : //www.django-rest-framework.org/api-guide/relations/#reverse-relations
这是我的 UserSerializer:
class UserSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
super(UserSerializer, self).__init__(*args, **kwargs) # call the super()
for field in self.fields: # iterate over the serializer fields
self.fields[field].error_messages['required'] = 'Enter a valid %s.'%field # set the custom error message
class Meta:
model = User
fields = ('username', 'password', 'email', 'userextended')
extra_kwargs = {
'password': …Run Code Online (Sandbox Code Playgroud) django django-models django-serializer django-rest-framework