Django - <class>没有ForeignKey

时间:2015-10-13 01:57:25

标签: python django django-models

我正在设置Django管理员:

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'对'Disk.Set'没有ForeignKey

根据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。

我真的很感激任何建议!

1 个答案:

答案 0 :(得分:2)

修剪你的代码就是问题所在 - 你在模型中说:

  

Set有一个FileFile有多个Set

但您的管理文件说:

  

Set可以有多个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)

或者修复你的管理员 - 这是一个完全重写,以上似乎你想要的。