南遷

2014-02-13 45 views
2

期間不可用在Django項目的Django GenericRelation領域,我有這樣的定義的模型:南遷

from django.db import models 
from django.contrib.contenttypes.models import ContentType 
from django.contrib.contenttypes import generic 

class TaggedEntry(models.Model): 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey("content_type", "object_id") 

    class Meta: 
     abstract = True 

class File(TaggedEntry): 
    name = models.CharField(max_length = 256) 
    # some more fields 

class Folder(models.Model): 
    name = models.CharField(max_length = 200) 
    files = generic.GenericRelation(File) 
    # some more fields 

在項目中,我可以用他們這樣說:

folder = Folder.objects.get(name="fooo") 
for f in folder.files.iterator(): 
    print f.name 

我現在準備一個數據遷移與South其中我需要訪問的文件夾的文件,但代碼folder.files.iterator()

給我一個錯誤:

Error in migration: main:0015_contenttype_to_manytomany_step0 
AttributeError: 'Folder' object has no attribute 'files' 

是否預計?

我怎樣才能知道文件夾的一部分?

+1

你有沒有通過南方提供的對象訪問你的模型:'orm ['appname.ModelName']'? – andrean

+0

是的。我在orm.Folder.objects.all()中做了''文件夾:'然後'在folder.files.iterator():中爲f。對不起,沒有提到它的問題。 – samb

+1

是這些模型在同一個應用程序?如果沒有,你可以嘗試使用'--freeze'選項並指定其他模型定義的應用程序? – andrean

回答

2

我找到了一個解決辦法過濾文件的對象與適當的content_type_id和OBJECT_ID:

from django.contrib.contenttypes.models import ContentType 
# ... 
folder_contenttype = ContentType.objects.get(name="folder") 
for folder in orm.Folder.objects.all(): 
    for f in orm.File.objects.filter(content_type_id = folder_contenttype.id, object_id = folder.id): # replaces folder.files.iterator(): 
     # ... 

這工作,但不太可讀。

+0

謝謝,這很有幫助。我遇到了一些不同的情況,但你的回答給我指明瞭方向。我在https://stackoverflow.com/a/47744112/565525上發佈了更多類似問題的答案。 –