2016-03-22 9 views
0

Ben django dinlenme çerçevesi için yeni.Django dayanağında birleştirilmiş modelden alan ekleme

Model Client ve Project var. Projem/görünümlerinde

class ProjectSerializer(CoreHyperlinkedModelSerializer): 
    class Meta: 
     model = Task 
     fields = ('url', 'id', 'name') 

: my proje/serileştiriciye içinde

class Client(models.Model): 
    name = models.CharField(max_length=100) 


class Project(models.Model): 
    client = models.ForeignKey(Client) 
    name = models.CharField(max_length=100) 

Öyle ProjectSerializer İstemci birincil anahtar eklemek mümkün istiyorum

class ProjectViewSet(viewsets.ModelViewSet): 
    queryset = Project.objects.order_by('name').all() 
    serializer_class = ProjectSerializer 

oluşturarak API tarayıcı görünümünde, yeni veri ekleyebiliyorum.

cevap

1

Bu muhtemelen şeyler yapıyor olması gerektiği gibi değil, ama sadece birincil anahtarı almak için, bir PrimaryKeyRelatedField kullanabilirsiniz:

class ProjectSerializer(...): 
    client = serializers.PrimaryKeyRelatedField(queryset=Client.objects.all) 

    class Meta: 
     model = Project 
     fields = ('url', 'id', 'name', 'client',) 
1

Bunu Project Serileştiricinize eklemelisiniz. Yabancı anahtarı alanlarınıza eklerseniz, size birincil anahtarı verecektir. Ayrıca, Project serileştiricisinde istemci görünümünüzü değiştirmek isterseniz, iç içe serileştirmeyi de kullanabilirsiniz.

class ProjectSerializer(CoreHyperlinkedModelSerializer): 
    client = serializers.SerializerMethodField() 

    def get_client(self, obj): 
     serializer = ClientSerializer(obj.client.objects.all()) 
     return serializer.data 

    class Meta: 
     model = Task 
     fields = ('url', 'id', 'name', 'client',)