简体   繁体   中英

how to use RelatedField in Django rest framework?

I have problem with Django restframe work i have 2 table that one of them is a foreign key to another i have used RelatedField in serializer but i get an error:'Relational field must provide a queryset argument, can someone help me in this case my code is as below:


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)

You have to provide queryset in RelatedField like this.

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

Or if you only want to use this related field for retrieving data, you can mark it as read only

doctable = serializers.RelatedField(many=True, read_only=True)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM