2011-11-25 152 views
1

我想根据django管理员来调整我的应用程序,使其更友好。django中的外键表单字段admin

Add offer page

以下管理页面好当用户创建报价给客户,这是在系统中已注册。但如果客户是新客户,则用户必须点击+并在弹出窗口中提交“添加新客户”表单。这很混乱。

我该如何改变这种行为来填充同一页面上的客户端数据,而不是在内联中弹出?

这是我的admin.py。

class OptionOffer(admin.ModelAdmin): 
    fieldsets = (('', {'fields': (('client'), 'startDate', 'regNumber')}),) 

class OptionClient(admin.ModelAdmin): 
    fieldsets = (('', {'fields': ('code')}),) 

class Client(models.Model): 
    code = models.CharField(verbose_name=_("Code"), max_length=11) 

class Offer(models.Model): 
    client = models.ForeignKey(Client, verbose_name = _("Client")) 
    startDate = models.DateTimeField(verbose_name = _("Start date")) 
    regNumber = models.CharField(verbose_name=_("Registration number"), max_length=6) 

回答

0

你不会得到一个更好的解决方案,而这样做的Django管理的一些严重的黑客攻击的model.py。您可能会遇到(或被指出)InlineModelFormsets,它们会在当前表单的底部提供一个表单,允许您以内联方式添加客户端。虽然这可能看起来像你所需要的,但很快你就会发现它不适合你的用例,因为它需要从客户到提供的外键关系,而不是你拥有哪个外键关系。提供给客户端

+0

谢谢你的回答。这是否意味着从传统的django管理应用程序离开或离开的任何步骤会让我受苦?用户想要在单个页面上进行逻辑相关的更改是非常常见的情况。也许我可能根本不会使用Django来解决这类问题。你怎么看?你能指点我一个很好的开源的django管理员用法的例子,所以我可以从最佳实践中学习。 – user537723

1

您可以使用一些Javascript框架,如jQuery,并使用iframe或类似的东西加载编辑页面中的弹出窗口。或者使用一些lightbox风格的弹出窗口而不是Django标准窗口。

相关问题