Mic*_*ich 6 django django-forms django-admin
嗨,
在管理面板中,我创建了用于添加产品的表单.表单包括2个内联表单集,因为有一些与产品相关的模型.用户可以创建产品,然后定义该产品的不同属性的变体.我将举例说明这一点.用户有一个3种不同颜色的T恤,并希望以不同的价格添加它们.T恤是作为具有3种变化的产品而创建的.
class Detail(models.Model):
product = models.ForeignKey('Product')
attribute = models.ForeignKey('Attribute')
value = models.CharField(max_length=500)
class Attribute(models.Model):
name = models.CharField(max_length=300)
class Variant(models.Model):
product = models.ForeignKey(Product)
details = models.ManyToManyField(Detail)
quantity = models.IntegerField()
price = models.DecimalField(max_digits=6, decimal_places=2)
Run Code Online (Sandbox Code Playgroud)
我省略了产品,因为它无关紧要.
class DetailInline(admin.TabularInline):
model = Detail
class VariantInline(admin.StackedInline):
model = Variant
class ProductAdmin(admin.ModelAdmin):
class Meta:
model = Product
inlines = [DetailInline, VariantInline]
Run Code Online (Sandbox Code Playgroud)
这很好用,模型保存得很好,我确实有Variants内联的问题.变量内联显示详细信息对象,但仅显示已保存在数据库中的对象.为了使用户的生活更加轻松,可以在创建Detail对象时将Detail对象添加到Variant内联,因此必须在保存Product之前进行.
我试图通过使用js将条目注入内联但是这是hackish并且Django没有使用伪值来验证formset抛出错误,选择了错误的值.
在我写这个问题时,我想到了最后的想法.如果更改了对象的内联形式,则可以创建js,将数据传递到自定义视图,该视图将创建对象并返回结果.我看到的一个问题(旁边感觉不对)是如何通知django创建了新对象,因此它不会引发有关非现有值的错误.
无论如何,我希望有人能理解这个长期的问题.
我想到的一件事是Knockout.js。
它非常擅长同时更新 DOM 中的大量元素,并且您可以通过客户端事件的 Ajax 调用轻松地将新值推送回自定义视图。
有几个框架可以做到这一点,但我认为 Knockout 是最流行的框架之一,例如 Backbone、Angular、Ember 等。
Django 通常会抱怨动态添加的选择,但只要在验证表单时它们存在于服务器端,理论上就应该没问题。
| 归档时间: |
|
| 查看次数: |
1126 次 |
| 最近记录: |