这个问题困扰了我几个小时。这是我要执行的操作的模式。
我有一个用户模型和一个个人档案模型,这是一对一的关系,但是我希望能够查询用户并从共享用户模型中检索所有电子邮件地址(共享用户模型)同一家公司(来自配置文件模型)。公平地讲,我对django的理解是有限的,但是我通过了serializer relations指南,并尝试了此处描述的最多方法,但没有用。在这一点上,我什至不确定自己在正确的道路上。
所以,我的理解是
source='profile'
方法可能有效)这有意义吗?在这一点上,我正在尝试通过序列化器完成所有这些操作,但未成功。这是我尝试过的一些代码片段,但不幸的是,我怀疑它们中的任何一个都将指向任何形式的解决方案。
class TeamEmailsSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['email']
class UserSerializer(serializers.ModelSerializer):
...
# only one of them was present at a time, but none gave any promising results
test_one = Profile.objects.filter(source=profile.company.id).values_list('user_id', flat=True)
test_one = serializers.RelatedField(source='profile.company.id', read_only=True)
test_one = TeamEmailsSerializer(many=True, read_only=True)
test_one = serializers.PrimaryKeyRelatedField(source='email', queryset=User.objects.filter())
class Meta:
model = User
fields = (
'test_one'
)
对于任何可能导致解决方案的线索,我深表感谢。
答案 0 :(得分:1)
首先,您还应该在用户上添加company
FK,这将使您的工作更加轻松。
然后,您可以在User
模型上定义新方法:
class User(AbstractBaseUser):
...
def other_users_emails(self):
return self.company.users.exclude(pk=self.id).values_list('email', flat=True)
然后在序列化程序中将'other_users_emails'
添加到fields
列表中。
或者,您可以在序列化程序上修改to_representation
方法,然后直接在其中添加'other_users_emails'
属性