mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-29 17:39:48 +03:00
added test for the issue 6751
This commit is contained in:
parent
e2e039b4e8
commit
c2336b5320
|
@ -18,6 +18,8 @@ from django.core.validators import (
|
|||
MaxValueValidator, MinLengthValidator, MinValueValidator
|
||||
)
|
||||
from django.db import models
|
||||
from django.db.models.signals import m2m_changed
|
||||
from django.dispatch import receiver
|
||||
from django.test import TestCase
|
||||
|
||||
from rest_framework import serializers
|
||||
|
@ -1259,3 +1261,43 @@ class Issue6110Test(TestCase):
|
|||
msginitial = ('Got a `TypeError` when calling `Issue6110TestModel.all_objects.create()`.')
|
||||
with self.assertRaisesMessage(TypeError, msginitial):
|
||||
Issue6110ModelSerializer().create({'wrong_param': 'wrong_param'})
|
||||
|
||||
|
||||
class Issue6751Model(models.Model):
|
||||
many_to_many = models.ManyToManyField(ManyToManyTargetModel, related_name='+')
|
||||
char_field = models.CharField(max_length=100)
|
||||
char_field2 = models.CharField(max_length=100)
|
||||
|
||||
|
||||
@receiver(m2m_changed, sender=Issue6751Model.many_to_many.through)
|
||||
def process_issue6751model_m2m_changed(action, instance, **_):
|
||||
if action == 'post_add':
|
||||
instance.char_field = 'value changed by signal'
|
||||
instance.save()
|
||||
|
||||
|
||||
class Issue6751Test(TestCase):
|
||||
def test_model_serializer_save_m2m_after_instance(self):
|
||||
class TestSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Issue6751Model
|
||||
fields = (
|
||||
'many_to_many',
|
||||
'char_field',
|
||||
)
|
||||
|
||||
instance = Issue6751Model.objects.create(char_field='initial value')
|
||||
m2m_target = ManyToManyTargetModel.objects.create(name='target')
|
||||
|
||||
serializer = TestSerializer(
|
||||
instance=instance,
|
||||
data={
|
||||
'many_to_many': (m2m_target.id,),
|
||||
'char_field': 'will be changed by signal',
|
||||
}
|
||||
)
|
||||
|
||||
serializer.is_valid()
|
||||
serializer.save()
|
||||
|
||||
self.assertEqual(instance.char_field, 'value changed by signal')
|
||||
|
|
Loading…
Reference in New Issue
Block a user