Thêm vào đầu các câu trả lời khác, đây là phiên bản an toàn hơn một chút để tránh làm rối các trường liên quan:
def is_simple_editable_field(field):
return (
field.editable
and not field.primary_key
and not isinstance(field, (ForeignObjectRel, RelatedField))
)
def update_from_dict(instance, attrs, commit):
allowed_field_names = {
f.name for f in instance._meta.get_fields()
if is_simple_editable_field(f)
}
for attr, val in attrs.items():
if attr in allowed_field_names:
setattr(instance, attr, val)
if commit:
instance.save()
Nó kiểm tra, trường bạn đang cố cập nhật có thể chỉnh sửa được, không phải là khóa chính và không phải là một trong các trường liên quan.
Ví dụ sử dụng:
book = Book.objects.first()
update_from_dict(book, {"num_pages":40, author:"Jack", date:"3324"})
Các bộ tuần tự .create
và .update
phương pháp DRF sang trọng có là có một bộ trường giới hạn và được xác thực, đây không phải là trường hợp cập nhật thủ công.
**
toán tử trong sổ tay tham chiếu ngôn ngữ Python. docs.python.org/reference/expressions.html#calls