Естественные ключи Django не работают для светильников?

У меня проблемы с приспособлениями / натуральными ключами в Джанго. Я думаю, что я решил большинство обычных проблем, подобных тем, которые указаны в этом ответе.

Это может быть красная сельдь, так как get_by_natural_key прекрасно работает в оболочке:

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

Что я делаю не так с приспособлениями?

Джанго 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."]

1 ответ

Решение

Оказывается, проблема была с моими приборами. Естественные ключи, я думаю, должны быть в форме списка; когда это говорит u"'PP_0772' value must be an integer."Это немного неправильно. Может быть, это относится к списку позиции.

Итак, это должно выглядеть так:

- 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
...

Надеюсь, что это помогает кому-то в подобных условиях.

Другие вопросы по тегам