我有几个预订Appointment
的Customer
。每个Appointment
正好有一个客户,尽管一个客户可以预订在不同时间发生的多个约会。
class Customer(model.Model):
def __unicode__(self):
return u'%s' % (self.name,)
name = models.CharField(max_length=30)
# and about ten other fields I'd like to see from the admin view.
class Appointment(models.Model):
datetime = models.DateTimeField()
customer = models.ForeignKey("Customer")
class Meta:
ordering = ('datetime',)
现在,当管理员通过查看管理中的“约会”(按时间排序)来浏览日程表时,有时他们希望查看有关具有特定约会的客户的信息。现在,他们必须记住客户的姓名,从“约会”导航到“客户”管理页面,找到记住的客户,然后才能浏览他们的信息。
理想情况下,类似管理内联的东西会很棒。然而,如果Customer
有ForeignKey("Appointment")
,我似乎只能在Appointment
管理页面上创建CustomerInline
。(Django特别给了我一个错误,说Customer
没有Appointment
的外键)。有人知道类似的功能吗,但是当Appointment
有ForeignKey('Customer')
时?
注:我简化了模型;实际的Customer字段目前除了名称(一些自由文本)之外还有大约10个字段,因此将所有信息都放在__unicode__
中是不切实际的。
4条答案
按热度按时间eufgjt7s1#
在django中没有简单的方法来做到这一点,内联被设计成向后跟踪关系。
最好的替代方法可能是提供一个指向用户对象的链接,但在列表视图中这是非常简单的:
向约会模型添加一个方法,如下所示:
然后在ModelAdmin中添加:
另一个解决方案是定义一个自定义的管理模板,这样你就可以做任何事情。下面是我以前用过的一个指南来解释:http://www.unessa.net/en/hoyci/2006/12/custom-admin-templates/
基本上从Django源代码中复制更改表单并添加代码来显示客户信息。
wnavrhmk2#
完成上面@John的回答-定义您希望在更改列表中看到的内容:
要将其添加到变更表单中,请参见:在Django admin的change_form中的两个模型字段之间添加自定义html
omjgkv6w3#
在约会的ModelAdmin类中,应声明以下方法:
有关详细信息,请浏览该函数的源代码,以给予您将访问哪些内容。
https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/options.py#L423
wtlkbnrh4#
有一个库可以使用。https://github.com/daniyalzade/django_reverse_admin
但如果你想使用链接到显示表中的对象,你可以喜欢这个代码:
在列表显示中: