У меня есть две модели: пользователь и организация. Пользовательская модель является моделью Django по умолчанию. Моя организационная модель выглядит следующим образом
class Organization(models.Model):
name = models.CharField(max_length=254, blank=False)
url = models.URLField(blank=True, null=True)
year = models.PositiveSmallIntegerField(blank=True, null=True)
users = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, through='Membership')
class Meta:
db_table = '"org_organization"'
class Membership(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
blank=True,
null=True,
)
organization = models.ForeignKey(Organization, on_delete=models.CASCADE)
position = models.CharField(max_length=254, blank=True, null=True)
is_admin = models.BooleanField(default=False)
class Meta:
db_table = '"org_organization_user"'
Пользователь привязан к одной (или нескольким) организациям через Membership
. Я могу получить детали для пользователя через UserReadSerializer
, который выглядит следующим образом
класс UserReadSerializer (serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
organization = MembershipSerializer(source='membership_set', many=True)
class Meta:
model = UserModel
fields = ('id', 'email', 'username', 'password', 'first_name', 'last_name', 'organization')
Таким образом, для идентификатора пользователя 1 я получаю следующий ответ:
{
"email": "******@gmail.com",
"first_name": "Hello",
"last_name": "User",
"username": "myuser",
"organization": [
{
"name": "Org1",
"url": "https://org1.net/",
"year": 1893,
"position": "position1",
"is_admin": true
},
{
"name": "Org2",
"url": "https://org2.net/",
"year": 1983,
"position": "position2",
"is_admin": false
}
]
}
Теперь я хочу изменить детали организации пользователя, например, позицию с помощью метода PUT, и для этого я передаю данные редактирования в формате, аналогичном следующему:
{
"email": "******@gmail.com",
"first_name": "Hello",
"last_name": "User",
"username": "myuser",
"organization": [
{
"name": "Org1",
"position": "changed_position1",
"is_admin": true
},
{
"name": "Org2",
"position": "changed_position2",
"is_admin": true
}
]
}
Мой сериализатор для этого выглядит так:
класс UserDetailsSerializer (serializers.Serializer):
username = serializers.CharField(required=True)
first_name = serializers.CharField(required=False)
last_name = serializers.CharField(required=False)
email = serializers.EmailField(required=False)
organization = MembershipSerializer(source='membership_set', many=True, required=False)
Но я не могу получить доступ к имени_организации. Все, что я получаю, это position
и is_admin
поле. Есть что-то, чего я здесь не хватает? Я использую Django 1.11. Спасибо за любую помощь!