我正在设置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 ForeignKey和 Django - Inline (has no ForeignKey to)但我无法弄清楚出了什么问题。
我正在使用Python 2.7.6,Django 1.8.4,MySQL 5.6和Ubuntu 14.04。
我真的很感激任何建议!
答案 0 :(得分:2)
修剪你的代码就是问题所在 - 你在模型中说:
Set
有一个File
,File
有多个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)
或者修复你的管理员 - 这是一个完全重写,以上似乎你想要的。