I want to allow saving some specific field only if it responds to some statement. Let me explain.
models.py
class classe(models.Model):
name = models.CharField(max_length=191)
groups = models.ManyToManyField('Group')
persons = models.ManyToManyField('Person')
class Group(models.Model):
name = models.CharField(max_length=191)
persons = models.ManyToManyField('Person')
class Person:
name = models.CharField(max_length=191)
serializers.py
class GroupSerializer(serializers.ModelSerializer):
persons = PersonSerializer(many=True, read_only=True)
person_id = serializers.PrimaryKeyRekatedField(queryset=Person.objects.all(), write_only=True)
def update(self, instance, validated_data, **kwargs):
instance.name = validated_data.get('name', instance.name)
person_field = validated_data.get('person_id)
classe = instance.classe_set #This one doesn't work
person_classe = classe.persons.all() #This one too
if (person_field in person_classe):
instance.persons.add(person_field)
instance.save()
return instance
So, the person_field can be saved only if the person is in the actual classe.
Everything work fine, but the two commented lines don’t, so can’t access the if statement.
Does someone know how can I figure it out ?