2016-05-04 2 views
0

Я хочу получить идентификатор записи, созданной во время вызова API Django REST Framework, поэтому я могу использовать ее в небольшом количестве кода, который мне нужно запустить в результате вызова API.Получить идентификатор записи Django после его создания в ModelViewSet

Вкратце я загружаю файл изображения, используя POST-вызов моей фотомодели, и я хочу, в результате этого вызова POST (и при обработке его в ViewSet) вставить идентификатор записи Photo, которая только что был создан в записи в другой модели (в моем случае называется модель Item).

Мой вопрос в местонахождении в PhotoViewSet позволяет мне получить идентификатор созданной записи?

Моя фотография модель выглядит следующим образом:

class Photo(models.Model): 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    item = models.ForeignKey(Item, on_delete=models.CASCADE) 
    photo = models.ImageField(upload_to="userphotos/", height_field=None, width_field=None, max_length=100) 
    date_submitted = models.DateTimeField(auto_now_add=True) 

Ассоциированный сериализатору выглядит следующим образом:

class PhotoSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = Photo 
     read_only_fields = ('user', 'photo', 'item') 

И ассоциированная ModelViewSet выглядит следующим образом:

class PhotoViewSet(viewsets.ModelViewSet): 
    queryset = Photo.objects.all() 
    serializer_class = PhotoSerializer 
    parser_classes = (MultiPartParser, FormParser,) 

    def perform_create(self, serializer): 
     the_itemID = self.request.data['item_id'] 
     the_userID = self.request.data['user_id'] 
     the_user = User.objects.get(pk=the_userID) 
     the_item = Item.objects.get(pk=the_itemID) 

     serializer.save(user=the_user, item=the_item, photo=self.request.data.get('photo')) 
+0

http://stackoverflow.com/questions/6253611/django-how-to-get-the-id-of-the-record-just-saved – WayBehind

ответ

2

Вызов serializer.save() должен вернуть экземпляр, который только что был создан.

instance = serializer.save(...)

instance_id = instance.id

1

serializer.save() возвращает Фото объекта, после чего вы можете получить доступ к его идентификатору.