我在出版和病理学之间有很多关系。每个出版物都可以有许多病症。当出版物出现在管理模板中时,我需要能够看到与该出版物相关的许多病理。这是模型声明:
class Pathology(models.Model):
pathology = models.CharField(max_length=100)
def __unicode__(self):
return self.pathology
class Meta:
ordering = ["pathology"]
class Publication(models.Model):
pubtitle = models.TextField()
pathology = models.ManyToManyField(Pathology)
def __unicode__(self):
return self.pubtitle
class Meta:
ordering = ["pubtitle"]
这是admin.py。我尝试过以下各种变体,但总是如此 得到一个错误,说出版物或病理学没有外键 相关联。
from myprograms.cpssite.models import Pathology
class PathologyAdmin(admin.ModelAdmin):
# ...
list_display = ('pathology', 'id')
admin.site.register(Pathology, PathologyAdmin)
class PathologyInline(admin.TabularInline):
#...
model = Pathology
extra = 3
class PublicationAdmin(admin.ModelAdmin):
# ...
ordering = ('pubtitle', 'year')
inlines = [PathologyInline]
admin.site.register(Publication,PublicationAdmin)
感谢您的帮助。
答案 0 :(得分:1)
除非您使用此处记录的中间表http://docs.djangoproject.com/en/dev/ref/contrib/admin/#working-with-many-to-many-intermediary-models,否则我认为您不需要创建Inline类。尝试删除行includes=[PathologyInline]
,看看会发生什么。
答案 1 :(得分:0)
我现在意识到Django非常适合网站的管理(数据输入),简单的搜索和模板继承,但是Django和Python对于复杂的Web应用程序并不是很好,因为数据在数据库之间来回移动和一个HTML模板。我决定将Django和PHP结合起来,希望利用两者的优势。谢谢你的帮助!
答案 2 :(得分:0)
这看起来更像是与我的一对多关系,所以我有点不清楚Pathologies究竟是什么。另外,据我所知,Inlines不适用于许多人。如果您翻转模型的顺序,删除manytomany并将ForeignKey字段添加到Pathology中的Publication。这应该有效。
class Publication(models.Model):
pubtitle = models.TextField()
def __unicode__(self):
return self.pubtitle
class Meta:
ordering = ["pubtitle"]
class Pathology(models.Model):
pathology = models.CharField(max_length=100)
publication = models.ForeignKey(Publication)
def __unicode__(self):
return self.pathology
class Meta:
ordering = ["pathology"]