У меня есть небольшая проблема с фреймворком django rest об общем отношении, которое также используется в единственном ограничении unique_together.django rest framework: contenttype unique_together и сериализация
У меня есть эта модель:
class VPC(models.Model):
name = models.SlugField(null=False, max_length=100)
deletable = models.BooleanField(null=False, default=True)
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
class Meta:
unique_together = (('name', 'content_type', 'object_id'))
Он имеет общую связь и ограничение уникальности: название VPC + родового соотношения (который является владельцем).
Вот сериализатору:
class VPCSerializer(serializers.ModelSerializer):
class Meta:
model = VPC
read_only_fields = ('deletable', 'date_created', 'date_modified')
fields = ('name', 'deletable')
lookup_field = 'name'
validators = [
UniqueTogetherValidator(
queryset=VPC.objects.all(),
fields=('name', 'content_type', 'object_id')
)
]
В полях я не поставил CONTENT_TYPE и object_id как я не хочу, чтобы они отображались/компл пользователями.
Но я должен поместить их в UniqueTogetherValidator, чтобы избежать возникшей ошибки django.db.utils.integrityerror при создании VPC с той же учетной записью/именем.
Но теперь, когда я пытаюсь создать VPC я получил эту ошибку:
{ "object_id": [ "Это поле является обязательным"], "content_type": [ "Это поле обязательно для заполнения. «]}
Так что в моем viewsets.ModelViewSet Я попытался переопределить perform_create() для установки object_id и content_type номе t это выглядит так, что ошибка возникает перед вызовом этого метода.
Я также пытаюсь переопределить get_serializer_context(), чтобы вернуть словарь, содержащий объекты object_id и content_type, но это не сработает.
Я потратил много времени на это, и я не узнал. Итак, какой метод я должен переопределить, чтобы иметь возможность устанавливать object_id и content_type в сериализаторе?
Спасибо.
Большое спасибо, это работает! (NB: добавьте content_type и object_id в атрибут полей для сериализатора) – JonDeau