我正在设置 Django 管理员:
模型.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创建文件也不起作用。
从 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。
我真的很感激任何建议!
最佳答案
修剪你的代码,问题是这样的 - 在你的模型中,你说:
A
Set
has oneFile
, and aFile
has manySet
s
但是您的管理文件显示:
A
Set
can have manyFile
s
这是两种相互矛盾的说法。您需要使它们匹配,任一:
修复你的模型:
class File(models.Model):
# Add the below line
file = models.ForeignKey(Set)
class Set(models.Model):
# Delete this line
# file = models.ForeignKey(File)
或者修复你的管理员 - 这是一个完整的重写,上面的内容似乎就是你想要的。
关于python - Django - <class> 没有外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33092908/