2017-07-08 3 views
0

Mein Category Modell ist verwandt mit User, aber ich finde keine Möglichkeit, die angemeldete Benutzer-ID in user_id Feld in Category zu speichern.Speichern Benutzer Fremdschlüssel bei der Erstellung des zugehörigen Modells

Categorymodels.py:

class Category(models.Model): 
    user = models.ForeignKey(User, default=None) 
    name = models.CharField(max_length=32, unique=True) 

views.py:

class CategoryList(APIView): 
    ... 
    def post(self, request): 
     """ 
     Create a new Category 
     :param request: 
     :return: Category 
     """ 
     user_id = request.user.pk 
     serializer = CategorySerializer(data=request.data) 

     if serializer.is_valid(): 
      serializer.save() 

      return Response(serializer.data, status=HTTP_201_CREATED) 

     return Response(serializer.errors, status=HTTP_400_BAD_REQUEST) 

kann ich request.user.pk zugreifen und sehen Sie es richtig gezeigt, aber ich kann nicht herausfinden, wie ich diesen Wert speichern kann beim Erstellen einer neuen Kategorie.

Antwort

1

Um aktuelle Benutzer-ID zu neuen Datensatz hinzufügen Sie aktuelle Benutzer als save Argument übergeben können:

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

Oder Sie können Serializer und verwenden ändern CurrentUserDefault:

user = serializers.HiddenField(default=serializers.CurrentUserDefault()) 

von docs:

Eine Standardklasse, die zur Darstellung des aktuellen Benutzers verwendet werden kann. Um dies zu verwenden, muss die "Anfrage" als Teil des Kontextwörterbuchs bereitgestellt worden sein, wenn der Serialisierer instanziiert wird.

So verwenden CurrentUserDefault Sie Anfrage Serializer in Hinblick auf geben müssen:

serializer = CategorySerializer(data=request.data, context={'request': request}) 
+0

Nur die erste Option gearbeitet. Vielen Dank. – mfgabriel92

Verwandte Themen