1

我在出版和病理学之间有着多对多的关系。每个出版物可能有许多病态。当某个出版物出现在管理模板中时,我需要能够查看与该出版物相关的许多病状。这是模型声明:

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)

谢谢你的帮助。

4

3 回答 3

1

除非您使用此处记录的中间表http://docs.djangoproject.com/en/dev/ref/contrib/admin/#working-with-many-to-many-intermediary-models,否则我不认为您需要创建一个内联类。尝试删除线includes=[PathologyInline],看看会发生什么。

于 2009-02-20T16:19:30.530 回答
0

我现在意识到 Django 非常适合网站的管理(数据输入)、简单的搜索和模板继承,但是 Django 和 Python 对于复杂的 Web 应用程序来说不是很好,因为数据在数据库和 html 之间来回移动模板。我决定将 Django 和 PHP 结合起来,希望能发挥两者的优势。谢谢你的帮助!

于 2009-02-24T17:57:57.373 回答
0

这对我来说更像是一对多的关系,尽管我不太清楚病理学到底是什么。另外,据我了解,内联不适用于多线程。如果您颠倒模型的顺序,删除 manytomany 并将 ForeignKey 字段添加到 Publication in Pathology,这应该可以工作。

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"]
于 2009-02-27T20:41:15.413 回答