Я использую django-restframework
для своего API. Я создал сериализатор, который должен перечислять мои объекты и иметь возможность их создавать.
У меня есть сущность Contact
и Product
. Между ними стандартный м2м для likes
.
Вот моя модель:
class Contact(models.Model):
...
products_of_interest = models.ManyToManyField(Product, related_name="interested_contacts")
Мой сериализатор настолько прост, насколько это возможно:
class ContactSerializer(serializers.ModelSerializer):
class Meta:
model = Contact
Когда я перечисляю свои контакты через этот сериализатор, я получаю все свои контактные объекты с массивом идентификаторов продуктов — круто:
"products_of_interest": [
1,
2
]
Теперь, когда я хочу создать контакты и заполнить m2m, я получаю следующее (через мой почтальон Chrome и данные формы):
- Отправить products_of_interest = 1 --> работает (!!!) но только для одного товара!
- Отправить products_of_interest = [1,2] --> требуется pk, а не unicode
- Отправить products_of_interest = 1;2 --> нужен pk, а не юникод
- Отправить products_of_interest[0] = 1, products_of_interest[1] = 2 --> вообще ничего не делается
У меня есть некоторый опыт работы с сериализаторами, поэтому я подумал, может быть, мне нужно сказать сериализатору, что я хочу дать ему более одного продукта. Поэтому я добавил это в свой сериализатор:
products_of_interest = ProductSerializer(many=True, required=False, read_only=False)
Теперь я получаю эту ошибку:
«‹Контакт: ›» должно иметь значение для поля «контакт», прежде чем можно будет использовать эту связь «многие ко многим».
Я совсем потерялся сейчас. Что я могу сделать? Не может быть, что мне нужно переопределить стандартные rfw-функции для сохранения чертовски легкого m2m, не так ли?
Спасибо!
Рон