python - Django 自然键不适用于固定装置?

标签 python django serialization fixtures natural-key

我在 Django 中的固定装置/自然键方面遇到问题。我想我已经解决了大多数常见问题,例如 this answer 中指定的问题.

这可能都是转移注意力的事情,因为 get_by_natural_key 在 shell 中工作得很好:

>>> artifact = Artifact.objects.get_by_natural_key('PP_0772')
>>> artifact
<Artifact: PP_0772: Test Artifact>

我对灯具做错了什么?

Django 1.6

models.py

... 

class ArtifactManager(models.Manager):
    def get_by_natural_key(self, code_number_):
        return self.get(code_number=code_number_)

class Artifact(models.Model):
    def __unicode__(self):
        return self.code_number + ": " + self.title
    def natural_key(self):
        return (self.code_number,)
    objects = ArtifactManager()

    title = models.CharField(max_length = 100, default = 'Untitled')
    code_number = models.CharField('Code Number',
        max_length = 10, unique = True)

class Picture(models.Model):
    def __unicode__(self):
        return self.artifact.code_number + ": " + self.title
    def get_file_name(self):
        return basename(self.image.name)
    def upload_path(instance, image_name):
        output = settings.MEDIA_ROOT + '/uploads/' + image_name
        return output

    image = models.ImageField(upload_to = upload_path, max_length=100,
        blank=False, null=False)
    artifact = models.ForeignKey('Artifact', blank=False, null=False)
    title = models.CharField(max_length = 100, default = 'Primary',
        blank=True, null=True)

... 

我的装置:pictures.yaml

- pk: 1
  model: collection.picture
  fields: 
    image: /Users/me/images/image.jpg
    artifact: PP_0772
    title: A great image
- pk: 2
  model: collection.picture
  fields: 
    image: /Users/me/images/another_image.jpg
    artifact: PP_0775
    title: A terrific image

...

错误

所以,当我运行 ./manage.py loaddata pictures 时,我得到:

DeserializationError: Problem installing fixture 'pictures.yaml':
[u"'PP_0772' value must be an integer."]

最佳答案

事实证明问题出在我的灯具上。我想,自然键需要采用列表形式;当它说u“'PP_0772'值必须是整数。”时,这有点用词不当。也许这指的是列表位置。

所以,它应该看起来像这样:

- pk: 1
  model: collection.picture
  fields: 
    image: /Users/me/images/image.jpg
    artifact:
      - PP_0772
    title: A great image
- pk: 2
  model: collection.picture
  fields: 
    image: /Users/me/images/another_image.jpg
    artifact:
      - PP_0775
    title: A terrific image
...

希望这对处于类似困境的人有所帮助。

关于python - Django 自然键不适用于固定装置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24642439/

相关文章:

python - 将多个文件从一台主机传输到另一台主机

python - 在 django rest 框架中对 ModelViewSet 的 PATCH 请求 - 我如何实现 serializer.update()?

python - 如何读取pandas dataframe中mongodb导出的Json

django - 在 Django Admin 上使用自定义 save() 方法保存模型后返回错误消息

django - 属性错误 : '...' object has no attribute '***_set'

django - 为什么 Celery 异步任务比同步任务慢?

json - 无法反序列化结构 ("value of type is not assignable to type")

python - Python 中的多重处理并不比顺序处理快

android - 保存我的序列化类,它没有像 Rect 这样的对象序列化

serialization - 如何从 Racket 中的文件中读取集合?