python - Django,序列化关系,对象而不是id

标签 python django orm django-models

我在序列化和关系方面遇到问题。我想要获取对象而不是对象 ID。 (Django 1.4)

这段代码在我的 View 中:

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)

serializers.serialize("json", Projects.objects.all().filter(pk=1), indent=3, use_natural_keys=True, ensure_ascii=False)

最佳答案

尝试DjangoFullSerializers来自wadofstuff。查看documentation关于关系。这应该可以完成工作。

关于python - Django,序列化关系,对象而不是id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14676442/

相关文章:

python - 带有 oAuth 和 Python 的 Twitter Streaming API

json - { "detail": "JSON parse error - Expecting value: line 1 column 1 (char 0)" }

python - 如何在 Django 中使用数据库关系?

python - 在 Python 中对数字序列 (1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1 .....) 使用列表理解

python - GQL 内部交易

python - 按值删除列表中的元素Python最快

python - Django 完整性错误处理

python - 没有在 postgresql 中的表上执行查询

java - 如何在使用 JPA 映射时增加 mysql 中字符串的长度

python - Django 通过多对多 ORM 对象中的多个标签进行过滤