2015-10-13 50 views
2

我設置了Django的管理員有:Django的 - <class>沒有ForeignKey的

model.py

class Types(models.Model): 
    types = models.CharField(max_length=60) 

    def __str__(self): 
     return self.type 

class File(models.Model): 
    file_name = models.CharField(max_length=60) 
    type = models.ForeignKey(Types) 

    def __str__(self): 
     return self.file_name 

class Set(models.Model): 
    set_name = models.CharField(default='New Set', max_length=60) 
    data = models.DateTimeField('Date of creation') 
    file = models.ForeignKey(File) 
    size = models.IntegerField(default=0) 

    def __str__(self): 
     return ("%s - %s" % (self.set_name, str(self.data))) 

    class Meta: 
     ordering = ["data"] 

而在admin.py

class FileInline(admin.StackedInline): 
    model = File 
    extra = 2 

class SetAdmin(admin.ModelAdmin): 
    fieldsets = [ 
     (None,  {'fields':['set_name']}), 
     (None,  {'fields':['data']}), 
     (None,  {'fields':['size']}), 
    ] 
    inlines = [FileInline] 

admin.site.register(Set, SetAdmin) 

有了這個我收到以下錯誤:

(admin.E202) 'Disk.File' has no ForeignKey to 'Disk.Set'

根據https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey中的文檔,它應該可以工作。

我做了一些測試:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#working-with-a-model-with-two-or-more-foreign-keys-to-the-same-parent-model但沒有成功。反轉這些類,從Set中使用ForeignKey創建File也不起作用。

從Django教程我已經設法讓關係工作,但我在複製它。

我檢查的建議在以下職位: Inline in Django admin: has no ForeignKeyDjango - Inline (has no ForeignKey to)但我無法弄清楚什麼是錯的。

我使用Python 2.7.6,Django 1.8.4,MySQL 5.6和Ubuntu 14.04。

我真的很感激任何建議!

+0

當你反轉FK時,你會得到什麼錯誤? –

+0

Disk.File沒有fk到Disk.set,看起來是另一種方式。 – cdvv7788

回答

1

修剪回你的代碼的問題是這樣的 - 在你的模型是說:

A Set has one File , and a File has many Set s

但是你的管理文件中表示:

A Set can have many File s

這是兩個矛盾的陳述。你需要使它們相匹配,無論是

解決您的機型:

class File(models.Model): 
    # Add the below line 
    file = models.ForeignKey(Set) 

class Set(models.Model): 
    # Delete this line 
    # file = models.ForeignKey(File) 

或修復你的管理 - 這是一個完全重寫,和上面似乎你想要什麼呢。