как использовать RelatedField в Django остальные рамки? - PullRequest
0 голосов
/ 28 января 2020

У меня проблема с работой Django restframe. У меня есть 2 таблицы, одна из которых является внешним ключом к другому. Я использовал RelatedField в сериализаторе, но я получаю сообщение об ошибке: 'Реляционное поле должно содержать аргумент queryset, может кто-то поможет мне в этом случае мой код, как показано ниже:


class DocTable(models.Model):
    project = models.CharField(max_length=1000, null=True, blank=True)
    document_no = models.CharField(max_length=1000, null=True, blank=True)
    document_title = models.TextField(null=True, default='', blank=True)

class PlanTable(models.Model):
    document = models.ForeignKey(DocTable, on_delete=models.CASCADE, related_name='doctable')
    work_type = models.CharField(max_length=1000, null=True, blank=True)
    description_work = models.TextField(null=True, default='', blank=True)
serializers.py

class DocTableSerializer(serializers.ModelSerializer):
    doctable = serializers.RelatedField(many=True)
    class Meta:
        model = DocTable
        fields = ['pk', 'project', 'document_no', 'doctable']
        read_only_fields = ['pk']


class PlanTableSerializer(serializers.ModelSerializer):
    class Meta:
        model = PlanTable
        fields = ['pk', 'document', 'work_type', 'description_work']
        read_only_fields = ['pk']
views.py
class  DocTableListView(generics.ListAPIView):
    lookup_field = 'pk'
    serializer_class =  DocTableSerializer
    def get_queryset(self):
        return PlanTable.objects.all()

    def get_object(self):
        pk = self.kwargs.get('pk')
        return PlanTable.objects.get(pk=pk)

1 Ответ

1 голос
/ 28 января 2020

Вы должны предоставить набор запросов в RelatedField следующим образом.

class DocTableSerializer(serializers.ModelSerializer):
    doctable = serializers.RelatedField(many=True, queryset=DocTable.objects.all())

Или, если вы хотите использовать это связанное поле только для извлечения данных, вы можете пометить его как только для чтения

* 1006. *
...