Size: a a a

Django [ru] #STAY HOME

2020 February 07

DT

Dan Tyan in Django [ru] #STAY HOME
тогда просто создаешь базу
и меняешь настройки подключения
источник

Д

Даниил in Django [ru] #STAY HOME
Файл db.sqlite3 можно удалять сразу?
источник

DT

Dan Tyan in Django [ru] #STAY HOME
если данные не нужны , да
источник

V

Valera in Django [ru] #STAY HOME
Привет.
Есть две модели

class Lesson():
    ....

class User()
   lesson = FK(Lesson)

Так же у меня есть класс UserAPIView, унаследованный от ModelViewSet, я использую метод update(). Мне нужно, чтобы при отправке данные на обновление, поле lesson было строкой (так как оно может создаваться, если его нет в БД). Есть ли какой-то бест практис, как лучше создавать ФК объект, если его нет? Данные отправляются content_type = application/x-www-form-urlencoded, то есть приходят в immutable виде
источник

VZ

Vlad Zhirov in Django [ru] #STAY HOME
Valera
Привет.
Есть две модели

class Lesson():
    ....

class User()
   lesson = FK(Lesson)

Так же у меня есть класс UserAPIView, унаследованный от ModelViewSet, я использую метод update(). Мне нужно, чтобы при отправке данные на обновление, поле lesson было строкой (так как оно может создаваться, если его нет в БД). Есть ли какой-то бест практис, как лучше создавать ФК объект, если его нет? Данные отправляются content_type = application/x-www-form-urlencoded, то есть приходят в immutable виде
можно через serializer это сделать
источник

V

Valera in Django [ru] #STAY HOME
Vlad Zhirov
можно через serializer это сделать
как?
источник

VZ

Vlad Zhirov in Django [ru] #STAY HOME
что-то типа такого. Код собран на коленке, чтобы показать идею.

   def update(self, validated_data):
       lesson_data = validated_data.pop("lesson")
       lesson = Lesson.objects.get_or_create(
       name=lesson_data
       )
      User.objects.filter(**validated_data).update(
           lesson=lesson
       )
       return instance
источник

VZ

Vlad Zhirov in Django [ru] #STAY HOME
если будет больше инфы, можем в ЛС решить задачу
источник

DT

Dan Tyan in Django [ru] #STAY HOME
Vlad Zhirov
что-то типа такого. Код собран на коленке, чтобы показать идею.

   def update(self, validated_data):
       lesson_data = validated_data.pop("lesson")
       lesson = Lesson.objects.get_or_create(
       name=lesson_data
       )
      User.objects.filter(**validated_data).update(
           lesson=lesson
       )
       return instance
тут с перемеными немного напутал

instance, created  - к методу get_or_create
источник

VZ

Vlad Zhirov in Django [ru] #STAY HOME
Dan Tyan
тут с перемеными немного напутал

instance, created  - к методу get_or_create
верно. брал пример из своего кода, там get_or_create. поэтому добавил приписку о написании
источник

DT

Dan Tyan in Django [ru] #STAY HOME
User.objects.filter(**validated_data).update(
           lesson=lesson
       )


этот код в принипе тут лишний


тут думаю что то вроде

lesson, created = Lesson.objects.get_or_create(
       name=lesson_data
       )

validated_data['lesson'] = lesson
super().update(validated_data)
источник

DT

Dan Tyan in Django [ru] #STAY HOME
код на вскидку
надо пробовать
источник

V

Valera in Django [ru] #STAY HOME
Он не зхаодит в update() сериализатора.
Я пытался так уже сделать.
Выдает что "Incorrect type. Expected pk value, received str."
источник

VZ

Vlad Zhirov in Django [ru] #STAY HOME
ты так же должен переопределить это поле в сериализаторе
lesson = serializers.CharField()
источник

V

Valera in Django [ru] #STAY HOME
Vlad Zhirov
ты так же должен переопределить это поле в сериализаторе
lesson = serializers.CharField()
а, вот это я забыл. Спасибо 🙂
источник

DT

Dan Tyan in Django [ru] #STAY HOME
на выходе, когда получаешь данные, тебе тоже строка нужна?
источник

V

Valera in Django [ru] #STAY HOME
Dan Tyan
на выходе, когда получаешь данные, тебе тоже строка нужна?
нет, pk
источник

DT

Dan Tyan in Django [ru] #STAY HOME
ну тогда, лучше оставить как есть
источник

DT

Dan Tyan in Django [ru] #STAY HOME
Dan Tyan
User.objects.filter(**validated_data).update(
           lesson=lesson
       )


этот код в принипе тут лишний


тут думаю что то вроде

lesson, created = Lesson.objects.get_or_create(
       name=lesson_data
       )

validated_data['lesson'] = lesson
super().update(validated_data)
и вот эту логику вынести в въю до сериализатора
источник

V

Valera in Django [ru] #STAY HOME
Dan Tyan
и вот эту логику вынести в въю до сериализатора
сейчас так и есть, просто думал, что не оч так
источник