我正在尝试扩展 Django 管理员以将相关字段添加到内联无法处理的模型添加/更改表单。
我的简化模型如下:
class Token(models.Model):
guid = models.CharField(max_length=38, blank=False)
class Package(models.Model):
tokens = models.ManyToManyField(Token)
class UserToken(models.Model):
user = models.ForeignKey(User)
token = models.ForeignKey(Token)
value = #Some instance specific value
expires = models.DateField(blank=False)
class UserPackage(models.Model):
user = models.ForeignKey(User)
package = models.ForeignKey(Package)
expires = models.DateField(blank=False)
我需要做的是在创建 UserPackage 以使用 Package 上的令牌 ManyToMany 关系来创建 UserTokens 时。每个 UserToken 可能有不同的实例值。
最好在 UserPackage 的管理添加/更改页面中填写令牌和值字段。该列表需要预先填充所有可能的条目,这就是为什么内联在这里似乎不是一个好的选择。
当前解决方案
在添加 URL 时期望 "?package=" 参数
覆盖 ModelAdmin.add_view(self, request, form_url='', extra_context=None) 以读取 URL 参数并生成令牌对象列表
扩展模型的 change_form 模板以创建
覆盖 ModelAdmin.save_model(self, request, obj, form, change) 以查看 request.data[] 以查找添加的字段。(当然,它们实际上不会出现在 ModelForm 中)。
问题
这可行,但似乎非常hacky。在 Django 1.4 中是否有更干净的解决方案来实现这一点?