我正在尝试扩展Django管理员,将相关字段添加到模型添加/更改表单中,这些表单无法由Inlines处理。
我的简化模型如下:
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的管理添加/更改页面中填写令牌和值字段是理想的。该列表需要预先填入所有可能的条目,这就是为什么内联在这里看起来不是一个好选择。
当前解决方案
期待“?package =”param on add URL
覆盖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中有没有更清晰的解决方案来实现它?