Я пытаюсь реализовать сериализатор, который возвращает родительскую запись с дочерними элементами, встроенными в объект json ответа.
Моя модель для родительского и дочернего элементов основана на представлениях базы данных:
class ProductContributorView(models.Model): # its a model of a view
id = models.IntegerField(primary_key=True)
product_id = models.ForeignKey('ProductTitleView', on_delete=models.DO_NOTHING, related_name='contributors')
sequenceNumber = models.IntegerField()
name = models.CharField(max_length=180)
role = models.CharField(max_length=8, null=True)
description = models.CharField(max_length=1408)
class Meta:
managed = False
ordering = ['sequenceNumber',]
class ProductTitleView(models.Model):
id = models.IntegerField(primary_key=True)
isbn = models.CharField(max_length=80)
titleText = models.CharField(max_length=300)
class Meta:
managed = False
ordering = ['titleText', 'isbn',]
Вот сериализаторы:
class ProductContributorViewSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = ProductContributorView
fields = ('id', 'product_id', 'sequenceNumber', 'name', 'role', 'description')
def create(self, validated_data):
contributor = ProductContributorView.objects.create(
id=validated_data['id'],
product_id=validated_data['product_id'],
sequenceNumber=validated_data['sequenceNumber'],
name=validated_data['name'],
role=validated_data['role'],
description=validated_data['description'])
return contributor
class ProductTitleViewSerializer(serializers.HyperlinkedModelSerializer):
contributors = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = ProductTitleView
fields = ('id', 'isbn', 'titleText', 'contributors')
Вот мнения:
class ProductTitleViewList(generics.ListAPIView):
queryset = ProductTitleView.objects.all()
serializer_class = ProductTitleViewSerializer
class ProductContributorViewList(generics.ListAPIView):
queryset = ProductContributorView.objects.all()
serializer_class = ProductContributorViewSerializer
Основная идея заключается в том, чтобы участники - автор, иллюстратор и т. Д. - возвращались сназвание книги на основе FK в представлении ProductContributorView, совпадающего с идентификатором в ProductTitleView.
Однако при выполнении этого я получаю следующую ошибку:
1054, "Unknown column 'jester_productcontributorview.product_id_id' in 'field list'"
Я не указалproduct_id_id в списке полей, и я также пытался ссылаться на поле как просто product в списке полей, но он все еще повторяет суффикс _id_id.Надеясь, что кто-нибудь укажет мне документацию, где объясняются соглашения об именах FK, или подскажет, что нужно изменить в списке полей.Спасибо!