如何使用管理员中的contenttypes自定义模型的显示?

| 我有以下模型:
class App(models.Model):
  name = models.CharField(max_length=100)

class ProjectA(models.Model):
  name = models.CharField(max_length=100)
  app  = models.ForeignKey(App)

class ProjectB(ProjectA):
  pass

class Attachment(models.Model):
  content_type    = models.ForeignKey(ContentType)
  object_id       = models.PositiveIntegerField()
  project         = generic.GenericForeignKey(\"content_type\",\"object_id\")
  file            = models.FileField(upload_to=\".\")
我正在注册管理员的所有模型,并且正在注销组,用户和站点。问题是,当我在管理员中访问附件时,看到的是这样呈现的: 在内容类型选择中,我看到以下列表: Attachment具有GenericForeignKey的原因是因为ProjectA和ProjectB都需要访问它。我知道ProjectA和ProjectB是相同的,但是必须将它们存储在2个单独的表中。如何使管理员可以使用Attachment类?我知道如何从普通视图使用内容类型,但是从管理员那里不知道。 在Attachment类中,我只想选择Project A或Project B,然后选择所有Project A \或所有Project B \的列表,然后是我要附加的文件。 管理员可以做这种事情吗?我需要向用户显示“对象ID”列吗?     
已邀请:
        如果我没看错,那么您想要这个。 http://code.google.com/p/django-genericadmin/ 我的建议会有所不同。您将在ProjectA,ProjectB中添加更多表单作为内联。在您的admin.py中
from django.contrib import admin
from django.contrib.contenttypes import generic

from myproject.myapp.models import Attachment, ProjectA, ProjectB

class Attachmentline(generic.GenericTabularInline): #or generic.GenericStackedInline, this has different visual layout.
    model = Attachment

class ProjectAdmin(admin.ModelAdmin):
    inlines = [
        Attachmentline,
    ]

admin.site.register(ProjectA, ProjectAdmin)
admin.site.register(ProjectB, ProjectAdmin)
转到您的ProjectA或ProjectB管理员,然后查看新管理员。 这不是您想要的,但可以为您提供帮助。否则,您需要检查第一个链接。     
        您应该注意   \“知道ProjectA和ProjectB是   相同,但这是一个要求   它们存储在2个单独的表中\“ 是不是真的正确。所有数据都存储在app_projecta表中,并且(仅)一些指针保存在表app_projectb中。如果您已经走了这条路,我建议您从此开始:
class App(models.Model):
  name = models.CharField(max_length=100)

class Project(models.Model):
    name = models.CharField(max_length=100)
    app = models.ForeignKey(App)

class ProjectA(Project):
  pass

class ProjectB(Project):
  pass

class Attachment(models.Model):
  project = models.ForeignKey(Project)
  file = models.FileField(upload_to=\".\")  
这已经使您更接近要到达的地方...     

要回复问题请先登录注册