【问题标题】:How do I reference Django Model from another model如何从另一个模型中引用 Django 模型
【发布时间】:2010-05-18 23:39:36
【问题描述】:

我希望在管理面板中为一个记录书籍、出版商和作者的测试程序创建一个视图(如在 djangoproject.com 上)

我定义了以下两个模型。

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.EmailField()

    def __unicode__(self):
        return u'%s %s' % (self.first_name, self.last_name)

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

    def __unicode__(self):
        return self.title

我想要做的是更改 Book 模型以引用任何作者的名字并使用 admin.AdminModels 显示它。

#Here is the admin model I've created.

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'publisher', 'publication_date') # Author would in here
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'
    ordering = ('-publication_date',)
    fields = ('title', 'authors', 'publisher', 'publication_date')
    filter_horizontal = ('authors',)
    raw_id_fields = ('publisher',)

据我了解,同一模型中不能有两个 ForeignKey。谁能给我一个例子来说明如何做到这一点?

我尝试了很多不同的东西,一整天都让我发疯。我对 Python/Django 很陌生。

为了清楚起见 - 我只是希望作者的名字/姓氏出现在书名和出版商名称旁边。

谢谢

【问题讨论】:

  • 不确定你的问题的答案,但“你不能在同一个模型中有两个 ForeignKeys”不是一个真实的陈述。我还认为您将外键与 __unicode__() 函数混淆了。

标签: django django-models django-admin


【解决方案1】:

您可以在一个模型上拥有多个外键。 如果您将外键字段的名称放在list_display 中,您将始终只看到关联模型的__unicode__ 表示。 但是你可以在BookAdmin 中添加这样的功能:

def first_names(self, obj):
    return ','.join(a.first_name for a in obj.authors.all())
get_sites.short_description = 'First Names'

然后将'first_names' 添加到list_display

【讨论】:

  • 请注意,此方法也可以在 Model 上,而不仅仅是 ModelAdmin。
  • 这仍然相关吗?当我尝试这个时,我得到一个 ImproperlyConfigured 异常 - 'BookAdmin.list_filter[0]' 指的是 'first_names' 不是指一个字段
猜你喜欢
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 2019-09-04
  • 2016-08-12
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 2011-09-19
相关资源
最近更新 更多