0

我正在尝试扩展 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 的管理添加/更改页面中填写令牌和值字段。该列表需要预先填充所有可能的条目,这就是为什么内联在这里似乎不是一个好的选择。

当前解决方案

  1. 在添加 URL 时期望 "?package=" 参数

  2. 覆盖 ModelAdmin.add_view(self, request, form_url='', extra_context=None) 以读取 URL 参数并生成令牌对象列表

  3. 扩展模型的 change_form 模板以创建

  4. 覆盖 ModelAdmin.save_model(self, request, obj, form, change) 以查看 request.data[] 以查找添加的字段。(当然,它们实际上不会出现在 ModelForm 中)。

问题

这可行,但似乎非常hacky。在 Django 1.4 中是否有更干净的解决方案来实现这一点?

4

0 回答 0