Как я могу преобразовать экземпляр в дикт с помощью метода модели и отношений?
Как я могу преобразовать экземпляр в dict с помощью метода модели и отношений?
class Customer(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=50,,null=True,blank=True)
birthdate = models.DateField(max_length=100,null=True,blank=True)
status = models.ForeignKey('status ',on_delete=models.CASCADE)
something = models.ManyToManyField('Something',blank=True)
def get_age(self):
diff = relativedelta(datetime.date.today(),self.birthdate )
return diff
я хочу собраться ниже
{
uuid : "value",
name : "value",
birthdate = "value",
status = {
status_id : "value"
status_text : "value"
},
something : [{
something_id : "value",
something_value : "value"
},{
something_id : "value",
something_value : "value"
}],
get_age : "value"
}
спасибо каждому эксперту
Короткий ответ
Вам следует использовать сериализаторы, в вашем случае лучшим вариантом будет ModelSerializer.
Длинный ответ
Во-первых, необходимо добавить декоратор @property
к функции get_age
(я переименовал ее в age
):
@property
def age(self):
diff = relativedelta(datetime.date.today(),self.birthdate )
return diff
Затем создайте сериализаторы:
class StatusSerializer(serializers.ModelSerializer):
class Meta:
model = Status
fields = ['status_id', 'status_value']
class SomethingSerializer(serializers.ModelSerializer):
class Meta:
model = Something
fields = ['something_id', 'something_value']
class CustomerSerializer(serializers.ModelSerializer):
status = StatusSerializer()
something = SomethingSerializer(many=True)
class Meta:
model = Customer
fields = ['uuid', 'name', 'birthdate', 'status', 'something', 'age']
Затем вы используете сериализатор для преобразования экземпляра вашей модели в dict:
customer_dict = CustomerSerializer(customer_model).data