Python Django,序列化关系,改为对象id
我在序列化和关系方面有问题。我想要获取对象,而不是对象id。(Django 1.4) 此代码在我的视图中:Python Django,序列化关系,改为对象id,python,django,orm,django-models,Python,Django,Orm,Django Models,我在序列化和关系方面有问题。我想要获取对象,而不是对象id。(Django 1.4) 此代码在我的视图中: serializers.serialize("json", Projects.objects.all(), indent=5, use_natural_keys=True) 序列化项目后,我得到: [ { "pk": 1, "model": "work.projects", "fields": {
serializers.serialize("json", Projects.objects.all(), indent=5, use_natural_keys=True)
序列化项目后,我得到:
[
{
"pk": 1,
"model": "work.projects",
"fields": {
"count": 3,
"date": "2013-02-03T09:43:20.474Z",
"client": 1,
"status": false,
"service": 1
}
}
]
这是我的模型:
from django.db import models
class ServicesManager(models.Manager):
def get_by_natural_key(self, name, price, unit):
return self.get(name=name, price=price, unit=unit)
class Services(models.Model):
objects = ServicesManager()
name = models.CharField(max_length=200)
price = models.IntegerField()
unit = models.CharField(max_length=50)
class CustomersManager(models.Manager):
def get_by_natural_key(self, name, city, street, post_code, phone, nip):
return self.get(name=name, city=city, street=street, post_code=post_code, phone=phone, nip=nip)
class Customers(models.Model):
objects = CustomersManager()
name = models.CharField(max_length=200)
city = models.CharField(max_length=200)
street = models.CharField(max_length=200)
post_code = models.CharField(max_length=100)
phone = models.CharField(max_length=200)
nip = models.CharField(max_length=200)
class Projects(models.Model):
client = models.ForeignKey(Customers)
service = models.ForeignKey(Services)
count = models.IntegerField()
date = models.DateTimeField(auto_now_add=True)
status = models.BooleanField(null=False)
def natural_key(self):
return (self.count, self.date, self.status,) + self.service.natural_key() + self.client.natural_key()
natural_key.dependencies = ['work.services', 'work.customers']
这是解决方案(型号):
from django.db import models
class Services(models.Model):
name = models.CharField(max_length=200)
price = models.IntegerField()
unit = models.CharField(max_length=50)
def natural_key(self):
return (self.name,self.price,self.unit)
class Customers(models.Model):
name = models.CharField(max_length=200)
city = models.CharField(max_length=200)
street = models.CharField(max_length=200)
post_code = models.CharField(max_length=100)
phone = models.CharField(max_length=200)
nip = models.CharField(max_length=200)
def natural_key(self):
return (self.name,self.city,self.street,self.post_code,self.phone,self.nip)
class Projects(models.Model):
client = models.ForeignKey(Customers)
service = models.ForeignKey(Services)
count = models.IntegerField()
date = models.DateTimeField(auto_now_add=True)
status = models.BooleanField(null=False)
def natural_key(self):
return (self.count, self.date, self.status, self.service.natural_key(), self.client.natural_key())
和查看代码(适用于UTF-8)
从
wadofsuff
尝试。查看有关关系的信息。这应该可以完成这项工作。我认为没有第三方库是可能的。我读过,但我做错了,因为它不起作用。你调用self.service.natural\u key()和self.client.natural\u key(),但它们似乎没有在模型中定义,只有get\u by\u natural\u key()是。
serializers.serialize("json", Projects.objects.all().filter(pk=1), indent=3, use_natural_keys=True, ensure_ascii=False)