Bor*_*éec 2 python django django-rest-framework
我Django-Rest有一个类User包含的领域first_name,而一个类Account包含的字段username和a_class_ref这是一个one-to-one'关系。
如何在序列化程序中B执行以下操作:
class AccountSerializer():
class Meta:
model= Account
fields= [
'username',
'firstname`
]
Run Code Online (Sandbox Code Playgroud)
帐户 :
class Account(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
related_name='account',
on_delete=models.CASCADE
)
def username(self):
return self.user.username <== this is the solution that I'm trying to avoid
Run Code Online (Sandbox Code Playgroud)
并且User是AbstractUserDjango-rest-framework的扩展,它带有一个first_name = models.CharField(_('first name'), max_length=30, blank=True)
谢谢
您可以使用以下source属性声明自定义字段:
class BSerializer(serializers.ModelSerializer):
a_field = serializers.CharField(source='a_class_ref.a_field')
class Meta:
model= B
fields= ['b_field', 'a_field']
Run Code Online (Sandbox Code Playgroud)
编辑
根据您发布的模型,以下内容应该有效:
class Account(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
related_name='account',
on_delete=models.CASCADE
)
class AccountSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='user.username')
firstname = serializers.CharField(source='user.first_name')
class Meta:
model= Account
fields= ['username', 'firstname']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1843 次 |
| 最近记录: |