2016-10-06 5 views
1

Ich habe folgende ModelleDaten von Fremdschlüsselbeziehungen in einem Serializer Django Get: Rest-Framework

class Task(models.Model): 
    task_name = models.CharField(max_length=255) 
    task_description = models.TextField(blank=True, null=True) 
    project_id = models.ForeignKey('Project') 



class Project(models.Model): 
    project_name = models.CharField(max_length=255) 
    project_description = models.CharField(max_length=255) 

ich für diese Aufgabe einen Serializer schreibe

class TaskSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Task 
     fields = (
      'id', 
      'task_name', 
      'task_description', 
      'project_id', 
       ) 

Aber ich möchte den Projektnamen als auch im TaskSerializer, auf den mit der Projekt-ID zugegriffen werden kann. Wie erreiche ich das?

Antwort

1

Geben Sie einen Serializer für Ihr Feld project_id an, z. B. haben Sie möglicherweise einen ProjectSerializer, der ein sehr einfacher Modellserializer ist. Verwenden Sie das etwa so:

class ProjectSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Project 
     fields = ('project_name',) 

class TaskSerializer(serializers.ModelSerializer): 
    project_id = ProjectSerializer() 

    class Meta: 
     model = Task 
     fields = (
      'id', 
      'task_name', 
      'task_description', 
      'project_id') 

Auch könnte worht Feststellung: Wenn foreignkey Beziehung seine im Allgemeinen eine gute Praxis der Benennung nur mit dem realted Modellnamen zu gehen, anstatt etwas anderes. project_id würde in diesem Fall einfach project werden. source: Working with models in django

+0

Dies gibt mir einen Projektname nicht für Task-Objekt Fehler definiert. Ich möchte sowohl ID als auch Name in der Antwort! –

+0

Nun, in diesem Fall erhalten Sie eine verschachtelte Antwort. Dh Sie müssen auf den Namen über task.project_id.project_name zugreifen. Um die Projekt-ID in der Antwort hinzuzufügen, ändern Sie einfach den Projektserializer –

Verwandte Themen