【问题标题】:Unable to use natural keys in django foreign key serialization无法在 django 外键序列化中使用自然键
【发布时间】: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 之间存在冲突,并且查询抛出错误。所以我回到第一方。

我们将非常感谢任何帮助。我已经分了几个小时的头发了。

【问题讨论】:

  • 而不是res in serialize() 尝试list(res)
  • 是的,我已经这样做了。结果相同。

标签: django serialization foreign-keys natural-key


【解决方案1】:

无论如何,我通过将 QuerySet 转换为原始字典类型格式解决了这个问题。我在过滤器之后附加了一个值子句。并遍历返回的整个查询集以制作字典列表。剩下的很简单。

【讨论】:

    【解决方案2】:

    阿尼瓦,

    你只需要删除你的行:

    db_table = '流行'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 2011-04-14
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      相关资源
      最近更新 更多