Я хочу обновить записи, связанные с внешними ключами или связанные любыми способами. Я знаю, как обновлять записи одной модели, но я не могу сделать то же самое в случае связанных моделей.Обновления Записи, связанные с внешним ключом В Django Rest
Мои модели:
class UserProfile(models.Model):
user = models.OneToOneField(User)
subject = models.ManyToManyField('Subjects')
phone = models.CharField(max_length=20)
address = models.TextField()
def __unicode__(self):
return self.user.username
class Subjects(models.Model):
name = models.CharField(max_length=100)
code = models.IntegerField()
def __unicode__(self):
return self.name
Мои сериализаторы:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = (
'id',
'first_name',
'username',
'email',
'is_active',
)
class SubjectSerializer(serializers.ModelSerializer):
class Meta:
model = Subjects
fields = (
'name',
'code',
)
class UserProfileSerializer(serializers.ModelSerializer):
user = UserSerializer()
subject = SubjectSerializer(many=True)
class Meta:
model = UserProfile
fields = (
'user',
'subject',
'phone',
'address',
)
Просмотров:
class UserProfileList(viewsets.ModelViewSet):
serializer_class = UserProfileSerializer
queryset = UserProfile.objects.all()
URLs
router.register(r'api/user/profile', UserProfileList)
Я могу увидеть первую запись как /api/user/profile/1/
Но когда я пытаюсь обновить запись из BROWSABLE Rest Апи это дает мне ошибку user with same username already exist.
Edit:
Я хочу обновить UserProfile
модель используя UserProfileSerializer
. Просто создайте новые записи, обновите существующий и удалите.
если ограничение уникальности удаляется, то он будет обновлять ту же запись или добавить NewOne? – saf
Это ваша работа, чтобы сделать это в функции создания/обновления serializer. Например, см. Http://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers. Причина в том, что существует слишком много возможных вариантов использования, поэтому DRF позволяет разработчику справиться с этим. – Linovia
ok Я проверю это – saf