Всем привет, задача: пользователь выбирает предложенные пункты(болезни) и они сохраняются в бд
models
class User(AbstractBaseUser):
is_required = models.BooleanField(verbose_name=_('Статус подтверждения'), default=False, blank=True)
is_staff = models.BooleanField(verbose_name=_('Статус персонала'), default=False)
group = models.ForeignKey('Groups', verbose_name=_('Группа'), on_delete=models.CASCADE, )
center = models.ForeignKey('Centers', verbose_name=_('Центр'), on_delete=models.PROTECT, null=True, blank=True)
disease = models.ManyToManyField('Disease', verbose_name=_('Заболевание'), blank=True)
number = models.CharField(verbose_name=_('Номер'), max_length=30, unique=True, null=True)
...
class Disease(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name if self.name else "Unnamed"
serializer
class UserSerializer(serializers.Serializer):
number = serializers.CharField()
password1 = serializers.CharField(write_only=True)
password2 = serializers.CharField(write_only=True)
center_id = serializers.IntegerField(allow_null=True, required=False)
disease_id = serializers.ListSerializer(child=serializers.PrimaryKeyRelatedField(queryset=Disease.objects.all()),
allow_null=True, required=False)
stage = serializers.IntegerField(read_only=True)
group = serializers.CharField()
def create(self, validated_data):
self.create_validate(validated_data)
code = self.context['request'].data.get('code')
print(code, 'code from serializer')
stage = self.context['request'].data.get('stage')
user = None
if stage == '1':
user = User.objects.create_user(
number=validated_data['number'],
password=validated_data['password1'],
group=validated_data['group']
)
user.stage = stage
validated_data['stage'] = stage
if stage == '2':
center_id = validated_data.get('center_id')
disease_ids = validated_data.get('disease_id', [])
try:
user = User.objects.get(number=validated_data['number'])
try:
center = Centers.objects.get(id=center_id)
user.center_id = center.id
user.country = center.country
except Centers.DoesNotExist:
user.center_id = None
user.disease.clear()
#здесь начинается логика сохранения disease_id
if disease_ids:
for disease_id in disease_ids:
disease = Disease.objects.get(pk=disease_id)
user.disease.add(disease)
user.stage = stage
validated_data['stage'] = stage
except User.DoesNotExist:
raise serializers.ValidationError('User does not exist for stage 2')
...
#stage - это шаг регистрации
ИЗМ:
немного проставил принтов и все они возвращают пустой список
if stage == '2':
center_id = validated_data.get('center_id')
disease_ids = validated_data.get('disease_id', [])
print(disease_ids, 'test1')
print(type(disease_ids))
try:
user = User.objects.get(number=validated_data['number'])
try:
center = Centers.objects.get(id=center_id)
user.center_id = center.id
user.country = center.country
except Centers.DoesNotExist:
user.center_id = None
print(disease_ids, 'dis_id1')
#здесь начинается логика сохранения disease_id
for disease_id in disease_ids:
disease = Disease.objects.get(pk=disease_id)
disease_ids.append(disease)
print(disease_ids, 'dis_id2')
user.stage = stage
validated_data['stage'] = stage
except User.DoesNotExist:
raise serializers.ValidationError('User does not exist for stage 2')
буду благодарен за помощь)