Django Model Custom Setter Getter: Store, Serialize, and Deserialize Lists
Django models allow you to define custom methods for both getting and setting values on a model instance. These methods can be used to manipulate the data before it's stored in the database or retrieved from it.
To store a list in a Django model field, you can use the TextField and serialize the list using JSON. Here's an example of a custom setter and getter method for a TextField that stores a list:
import json
class MyModel(models.Model):
my_list = models.TextField()
def get_my_list(self):
return json.loads(self.my_list)
def set_my_list(self, value):
self.my_list = json.dumps(value)
In this example, the get_my_list method deserializes the JSON string stored in the my_list field and returns the resulting list. The set_my_list method serializes the provided list using JSON and stores it in the my_list field.
You can also use the @property decorator to define a custom getter method without a corresponding setter. Here's an example of a read-only property that returns a list:
import json
class MyModel(models.Model):
my_list = models.TextField()
@property
def my_list_as_list(self):
return json.loads(self.my_list)
In this example, the my_list_as_list property returns the deserialized list without providing a setter method.
To serialize and deserialize a Django model instance that contains a list field, you can use the json module. Here's an example of how to serialize and deserialize a MyModel instance:
import json
my_model = MyModel.objects.create(my_list=[1, 2, 3])
# Serialize the model instance to a JSON string
serialized_data = json.dumps({'my_model': my_model.my_list})
# Deserialize the JSON string to a Python dictionary
deserialized_data = json.loads(serialized_data)
# Create a new MyModel instance from the deserialized data
new_model = MyModel.objects.create(my_list=deserialized_data['my_model'])
In this example, the json.dumps method serializes the my_list field of the my_model instance to a JSON string. The json.loads method deserializes the JSON string to a Python dictionary. Finally, a new MyModel instance is created using the deserialized data.
原文地址: https://www.cveoy.top/t/topic/ml7H 著作权归作者所有。请勿转载和采集!