Я использую DRM v3.9.4 и имею следующие модели:
class Book(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
...
users = models.ManyToManyField("User", related_name="books", through="BookUser")
class BookUser(models.Model):
user = models.ForeignKey("User", on_delete=models.CASCADE)
book = models.ForeignKey("Book", on_delete=models.CASCADE)
permission = models.CharField(...)
class User(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
...
со следующими сериализаторами:
class UserSerializer(ModelSerializer):
class Meta:
model = User
fields = ( "id", ... )
class BookUserSerializer(ModelSerializer):
class Meta:
model = BookUser
fields = ('user', 'permission')
class BookSerializer(ModelSerializer):
users = BookUserSerializer(source='bookuser_set', many=True)
class Meta:
model = Book
fields = ( "id", "users", ... )
extra_kwargs = {
"users": {"allow_empty": True},
}
При чтении (GET) книги все в порядке :
{
id: ...,
users: [
{
user: 'some-uuid',
permission: 'read-only'
},
...
]
}
, но при попытке выполнить POST с использованием той же полезной нагрузки:
{
id: ...,
users: [
{
user: 'some-uuid',
permission: 'read-only'
},
...
]
}
я получаю сообщение об ошибке:
KeyError: 'users'
, глядя на API-руководство ( https://www.django-rest-framework.org/api-guide/relations/) кажется, что по умолчанию вложенные сериализаторы доступны только для чтения, но я не могу заставить его работать.
Кстати, ВАЖНО: все пользователи (и должны) уже существуют поэтому я ожидаю, что этот вызов POST добавит запись в промежуточную таблицу BookUser
и, конечно, сам Book
, но НЕ будет фактически добавлять новые записи пользователей.
Любая помощь, руководство или помощь была бы признательна, как заставить эту вещь работать