【发布时间】:2013-03-30 11:52:08
【问题描述】:
所以问题是我有一个有外键的类。
这是我的代码
class Proxy(models.Model):
class Meta:
db_table = 'Proxy'
equipment = models.ForeignKey('Equipment', primary_key=True)
pop = models.ForeignKey('Pop')
现在,像往常一样
import django.core.serializers as Serializer
res = Proxy.objects.filter(equipment_id__exact='eq1')
Serializer.serialize('json', res)
json 输出包含 Pop 的“id”而不是我想要的名称。
所以我使用了 Manager 类,现在这是我的 Pop 类-
class PopManager(models.Manager):
def get_by_natural_key(self, name):
return self.get(name=name)
class Pop(models.Model):
POP_TYPES = (
('phy','phy'),
('cloud','cloud'),
)
class Meta:
db_table = 'Pop'
unique_together = ('name', 'vip')
objects = PopManager()
name = models.CharField(max_length=10)
type = models.CharField(max_length=10, choices=POP_TYPES)
def natural_key(self):
return (self.name)
但在此之后,当我这样做时
res = Proxy.objects.filter(equipment_id__exact='eq1')
Serializer.serialize('json', res, use_natural_keys=True)
我得到一个错误, TypeError: Equipment: eq1 is not JSON serializable
我也尝试过 wadofstuff 用于这种外键序列化,但显然在 Django1.5 中,simplejson 和 json 之间存在冲突,并且查询抛出错误。所以我回到第一方。
我们将非常感谢任何帮助。我已经分了几个小时的头发了。
【问题讨论】:
-
而不是
resinserialize()尝试list(res)。 -
是的,我已经这样做了。结果相同。
标签: django serialization foreign-keys natural-key