我有一个配置文件模型,它与Django的用户模型有一对一的关系,我有另一个模型,名为权限(与Django的内部权限无关),有一个配置文件的外键。像这样的:(我已经删除大多数字段在这里,为了简单起见)Django REST框架:间接相关属性的SlugRelatedField?
from django.db import models
from django.contrib.auth.models import User as DjangoUser
class Account(models.Model):
name = models.CharField(max_length=200, db_index=True)
class Profile(models.Model):
django_user = models.OneToOneField(DjangoUser)
default_account = models.ForeignKey(Account)
class Permission(models.Model):
# Which user has the permission
user = models.ForeignKey(Profile, db_index=True)
# Which account they have the permission on
account = models.ForeignKey(Account, db_index=True)
我想为许可串行,这将创建一个这样的对象:
{
"user": "[email protected]",
"account": 123
}
其中值“account”是账户的主键(这很简单,我可以使用PrimaryKeyRelatedField),“user”的值是用户的电子邮件地址(这是我还没有弄清楚的部分,因为电子邮件地址是不直接存储在Profile对象上,它在关联的DjangoUser对象上)。还要注意,这不是只读的 - 创建权限时,它需要能够将电子邮件地址反序列化为Profile对象。
有些事情到目前为止,我已经试过了,为表示对权限串行用户...
1.
user = serializers.RelatedField(read_only=False)
有了这一个,如果我发布的电子邮件地址(或主键或其他任何东西)作为“用户”,它返回一个400错误,说{"user": "This field is required."}
,好像我根本没有包含该字段。
2.
user = serializers.SlugRelatedField(slug_field='django_user.email')
有了这一个,我得到AttributeError: 'Profile' object has no attribute 'django_user.email'
。同样的事情发生,如果我使用'django_user__email'
。
任何想法?
这个问题明确指出,这会导致AttributeError。 – Avril 2015-11-06 18:45:34