2014-07-08 4 views
1

장고의 비품/자연 키에 문제가 있습니다. this answer에 지정된 것과 같은 대부분의 일반적인 문제를 해결했다고 생각합니다.Django 자연 키가 조명기에서 작동하지 않습니까?

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

무엇 내가 설비와 잘못하고 있어요 : get_by_natural_key 쉘에서 잘 작동으로

이 모두가 붉은 청어 될 수 있을까요?

장고 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 

... 

오류

,536,913 내가 ./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 
... 

희망이 유사한 해협에 누군가를하는 데 도움이됩니다.

+1

자연스러운 키를 간단한 문자열로 덤프 할 수 있지만 터플/목록으로 다시로드해야한다는 것은 이상합니다. 이것을 알아 내서 고마워! – tbm

+0

당신을 환영합니다! – allanberry