Size: a a a

2020 June 04

ST

Storm Trooper in Python Flask
products = Product.query.all()
for product in products:
   product.category = [some categories]

db.session.commit()
источник

W

WiCKed in Python Flask
Storm Trooper
Я пока не встречал чтобы так делали.
Обычно выбирают все продукты и фором обновляют нужные полня у всех продуктов и всё
а можно какой-нить пример? может я вообще хрень сделал 🙂
источник

ST

Storm Trooper in Python Flask
выше
источник

ST

Storm Trooper in Python Flask
Ты просто перемудрил
источник

W

WiCKed in Python Flask
Storm Trooper
products = Product.query.all()
for product in products:
   product.category = [some categories]

db.session.commit()
это случай когда нужно обновить поле нескольким объектам. А мне нужно обновить одному объекту несколько полей, это могут быть любые отдельные поля или все поля, в зависимости от метода PUT или PATCH. И вот категории мне приходится обновлять именно так. Но я же не буду на каждое поле писать if input_date[‘name’]: product.name = input_data[‘name’], if input_data[‘featured’]: product.featured = input_data[‘featured’] - поэтому методом апдейт я обновляю все имеющиеся в словаре input_data значения
источник

ST

Storm Trooper in Python Flask
А что мешает обновить несколько полей?
product.field1 = some shit
product.field2 = some another shit
etc.
.commit()
источник

W

WiCKed in Python Flask
Storm Trooper
А что мешает обновить несколько полей?
product.field1 = some shit
product.field2 = some another shit
etc.
.commit()
то есть на каждое поле сделать if оно есть в инпут дате от пользователя? ну а если таких полей допусти десятки - это явно не путь джедая
источник

ST

Storm Trooper in Python Flask
Зачем делать if на каждое поле?
источник

ST

Storm Trooper in Python Flask
воспользуйся методом get у словаря
источник

ST

Storm Trooper in Python Flask
product.field1 = data_input.get('name')
Если поле пустое туда запишется None, либо значение по умолчанию, которое ты напишешь после запятой
источник

W

WiCKed in Python Flask
Storm Trooper
product.field1 = data_input.get('name')
Если поле пустое туда запишется None, либо значение по умолчанию, которое ты напишешь после запятой
Я не создаю новый объект продукта а обновляю. Соответственно мне не нужно ни None ни по-умолчанию. Если пользователь не передал поле то его менять не нужно.
источник

W

WiCKed in Python Flask
Storm Trooper
product.field1 = data_input.get('name')
Если поле пустое туда запишется None, либо значение по умолчанию, которое ты напишешь после запятой
Можно конечно - product.field1 = data_input.get('name’, product.field1) но мне казалось это убого
источник

ST

Storm Trooper in Python Flask
WiCKed
Я не создаю новый объект продукта а обновляю. Соответственно мне не нужно ни None ни по-умолчанию. Если пользователь не передал поле то его менять не нужно.
Где тут создание нового объекта?

Тебе прилетают данные на редактирование объекта, допустим id-шник

Ты что делаешь? Правильно, вытаскиваешь из БД объект по id

Потом в зависимости от нужд, расписываешь какие поля надо обновить и комитишь данные в бд
Всё!

Вроде всё понятно.
источник

ST

Storm Trooper in Python Flask
Щас приведу пример
источник

W

WiCKed in Python Flask
Storm Trooper
Где тут создание нового объекта?

Тебе прилетают данные на редактирование объекта, допустим id-шник

Ты что делаешь? Правильно, вытаскиваешь из БД объект по id

Потом в зависимости от нужд, расписываешь какие поля надо обновить и комитишь данные в бд
Всё!

Вроде всё понятно.
В целом понятно - я просто думал, что обновление методом апдейт это по науке
источник

ST

Storm Trooper in Python Flask
@blueprint.route('/<int:car_id>', methods=['PUT'])
def edit_car(car_id):
car = Car.query.get(car_id)

car.name = data_input.get('name')
car.number = input_data.get('number)

db.session.commit()
источник

ST

Storm Trooper in Python Flask
WiCKed
В целом понятно - я просто думал, что обновление методом апдейт это по науке
ну почитай в доке, когда используется update у session и всё встанет на свои места
источник

ST

Storm Trooper in Python Flask
Я пока не стречал, чтобы делали так, как ты говоришь
источник

W

WiCKed in Python Flask
Storm Trooper
@blueprint.route('/<int:car_id>', methods=['PUT'])
def edit_car(car_id):
car = Car.query.get(car_id)

car.name = data_input.get('name')
car.number = input_data.get('number)

db.session.commit()
раз этот вариант каноничный - переделаю таким образом конечно 🙂
источник

W

WiCKed in Python Flask
Спасибо, сделаю таким образом, раз это полностью корректно 🙂
источник