Size: a a a

Django [ru] #STAY HOME

2020 August 28

D

Dmitry in Django [ru] #STAY HOME
ты возвращаешь в ответе то, что тебе пришло с фронта, вместо того, что получилось на бэке.
А в perform_create ты описываешь всю логику. Или в perform_update
источник

НТ

Никита Тарасов... in Django [ru] #STAY HOME
Можно пример? Или все то, что есть какая то логика/условия перенести в perform_create(perform_update), а в самом create делать:
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
      return Response(
           serializer.data,
           status=status.HTTP_201_CREATED,
           headers=headers
)

?
источник

RM

Renat Mavlyutov in Django [ru] #STAY HOME
Доброго времени суток
есть ошибка 'int' object has no attribute '_meta'
как исправить и с чем связана?
источник

НТ

Никита Тарасов... in Django [ru] #STAY HOME
Dmitry
ты возвращаешь в ответе то, что тебе пришло с фронта, вместо того, что получилось на бэке.
А в perform_create ты описываешь всю логику. Или в perform_update
"того, что получилось на бэке"

А как это вернуть?



Сори, я фронтендер ))
источник

RM

Renat Mavlyutov in Django [ru] #STAY HOME
источник

D

Dmitry in Django [ru] #STAY HOME
Никита Тарасов
Можно пример? Или все то, что есть какая то логика/условия перенести в perform_create(perform_update), а в самом create делать:
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
      return Response(
           serializer.data,
           status=status.HTTP_201_CREATED,
           headers=headers
)

?
вообще логика валидаций как по мне в большинстве случаев должна лежать в сериалайзере. Но в качестве примера:
   def perform_create(self, serializer):
       company = self.request.user.company
       if not company:
           pass # пусть здесь будет твоя валидация
       serializer.save(company=company)
источник

D

Dmitry in Django [ru] #STAY HOME
if models.Profile.objects.exists():
           profile = models.Profile.objects.all()\
               .filter(user=self.request.user)[0]
источник

D

Dmitry in Django [ru] #STAY HOME
Здесь у тебя совсем странный кусок
источник

НТ

Никита Тарасов... in Django [ru] #STAY HOME
Я не горжусь своим кодом )) Я рад, что работает. Стремлюсь к идеалу.
источник

NC

Nikolay Cherniy in Django [ru] #STAY HOME
Renat Mavlyutov
Доброго времени суток
есть ошибка 'int' object has no attribute '_meta'
как исправить и с чем связана?
джанга ждет инстанс а ты передаешь ей id
источник

NC

Nikolay Cherniy in Django [ru] #STAY HOME
Renat Mavlyutov
Доброго времени суток
есть ошибка 'int' object has no attribute '_meta'
как исправить и с чем связана?
у тебя там создается объект или редактируется?
источник

RM

Renat Mavlyutov in Django [ru] #STAY HOME
Nikolay Cherniy
у тебя там создается объект или редактируется?
редактирую объект
источник

NC

Nikolay Cherniy in Django [ru] #STAY HOME
Renat Mavlyutov
редактирую объект
сначала instance = get_object_or_404(ModelName, pk=pk)
а потом поменяй pk на instance
источник

D

Dmitry in Django [ru] #STAY HOME
Никита Тарасов
Я не горжусь своим кодом )) Я рад, что работает. Стремлюсь к идеалу.
источник

RM

Renat Mavlyutov in Django [ru] #STAY HOME
Nikolay Cherniy
сначала instance = get_object_or_404(ModelName, pk=pk)
а потом поменяй pk на instance
спасибо
источник

NC

Nikolay Cherniy in Django [ru] #STAY HOME
Renat Mavlyutov
спасибо
подкоректировал, ну и импортировать надо этот гет обжект
источник

D

Dmitry in Django [ru] #STAY HOME
def create(self, request, *args, **kwargs):
       serializer = self.get_serializer(data=request.data)
       serializer.is_valid(raise_exception=True)
       self.perform_create(serializer)
       headers = self.get_success_headers(serializer.data)
       return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

У тебя должен вызываться perform_create(), а потом уже вернуться serializer.data

При этом сам перформ креейт:
   def perform_create(self, serializer):
       serializer.save()

Т.е. тебе нужно сохранить сериалайзер
источник

D

Dmitry in Django [ru] #STAY HOME
Никита Тарасов
Я не горжусь своим кодом )) Я рад, что работает. Стремлюсь к идеалу.
в твоём TransactionViewSet вообще объект сохраняется в базу? Ты не вызываешь serializer.save()
источник

НТ

Никита Тарасов... in Django [ru] #STAY HOME
Dmitry
в твоём TransactionViewSet вообще объект сохраняется в базу? Ты не вызываешь serializer.save()
Да, все сохраняется
источник

НТ

Никита Тарасов... in Django [ru] #STAY HOME
Dmitry
def create(self, request, *args, **kwargs):
       serializer = self.get_serializer(data=request.data)
       serializer.is_valid(raise_exception=True)
       self.perform_create(serializer)
       headers = self.get_success_headers(serializer.data)
       return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

У тебя должен вызываться perform_create(), а потом уже вернуться serializer.data

При этом сам перформ креейт:
   def perform_create(self, serializer):
       serializer.save()

Т.е. тебе нужно сохранить сериалайзер
Получается после serializer.save() при выполнении кода:
return Response(serializer.data,

serializer.data должна быть с ID?
источник