多人管理模板

时间:2009-02-20 16:05:01

标签: python django django-admin many-to-many

我在出版和病理学之间有很多关系。每个出版物都可以有许多病症。当出版物出现在管理模板中时,我需要能够看到与该出版物相关的许多病理。这是模型声明:

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)

感谢您的帮助。

3 个答案:

答案 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"]