2017-07-22 3 views
1

Ich habe ein Modell, das Benutzer als Fremdschlüssel hat:Django-Rest Sparmodell gegen einen bestimmten Benutzer

class Task(models.Model): 
    user = models.ForeignKey(User) 
    what_task = models.CharField(max_length=100,) 

    #This helps to print in admin interface 
    def __str__(self): 
     return u"%s" % (self.what_task) 

Es ist Serializer:

class TaskSerializer(serializers.ModelSerializer): 
    steps = StepSerializer(many=True) 
    class Meta: 
     model = Task 
     fields = '__all__' 


    def create(self, validated_data): 
     steps_data = validated_data.pop('steps') 
     task = Task.objects.create(**validated_data) 
     for step_data in steps_data: 
      Step.objects.create(task=task, **step_data) 
     return task 

Und meiner Meinung nach habe ich eine Funktion, Griffe GET und POST Anfrage. GET ist korrekt, es gibt mir alle Aufgaben eines bestimmten Benutzers zurück - ich benutze request.user.id dafür.

Ich bin nicht sicher über meine POST, wie ich Aufgabe gegen einen bestimmten Benutzer in diesem Fall speichern:

@api_view(['GET', 'POST']) 
def task_list(request): 
    """ 
    List all tasks, or create a new task. 
    """ 
    if request.method == 'GET': 
     tasks = Task.objects.filter(user=request.user.id) 
     serializer = TaskSerializer(tasks, many=True) 
     return Response(serializer.data) 

    elif request.method == 'POST': 
     serializer = TaskSerializer(data=request.data) 
     print(request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data, status=status.HTTP_201_CREATED) 
     else: 
      return Response(
       serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

Wo muss ich Änderung vornehmen, in Serializer oder in Sicht?

Antwort

1

Veränderung in Ihren Modellen,

user = models.ForeignKey(User, blank=True) 

Dann Änderungen migrieren.

dann in Ihren Ansichten,

if serializer.is_valid(): 
    serializer.save(user=request.user) 
+0

Brauche ich auch Benutzerfeld in meinem Wunsch JSON hinzufügen? weil es mir gab '{"user": ["Dieses Feld ist erforderlich."]}' Fehler. – Nitish

+0

Die Antwort wurde aktualisiert. – zaidfazil

+0

Das hat funktioniert, vielen Dank! – Nitish

Verwandte Themen