我有一个简单的模型:
class ModelA(models.Model):
type = models.ForeignKey(Type)
amount = models.DecimalField()
product = models.ForeignKey(Product)
我已经为它创建了视图和模型表单
class ModelAForm(ModelForm):
class Meta:
model = ModelA
fields = [
'type', 'amount', 'product'
]
我该怎么做:
当用户在表单中选择'键入' - TYPE1然后在'产品'他有所有产品。它现在有效。
但是当用户选择TYPE2时,我想只用少量产品(例如年龄超过一年)向他展示
答案 0 :(得分:0)
我会用js做这件事。选择第一个下拉列表后,根据所选值,我将触发一个ajax调用,仅从后端获取与选定值相关的内容,并更新产品的下拉列表。
Ajax适用于这种情况,因为它不会阻止浏览器中的其他操作并运行异步。
答案 1 :(得分:0)
您需要验证您的表单,因为即使您上传Ajax,任何人都可以使用您的表单代码向您发送任何类型和产品ID的组合。我不知道这对您来说很重要(您是否将订单存储为类型和产品的组合,并且您的产品与类型相关)。 要做到这一点:
from django.utils.translations import ugettext_lazy as _
class ModelAForm(ModelForm):
# Your code here
def clean(self):
cleaned_data = super(ModelAForm, self).clean()
product_type = cleaned_data.get("type")
product = cleaned_data.get("product")
if product.type != product_type:
msg = _("Wrong product type.")
self.add_error('product', msg)
如果您正在寻找动态表单字段,可以查找允许您创建动态表单,排序和过滤的django-select2库。例如,如果您在此类型中拥有10'000种产品,您的客户将如何从简单的Django表单中选择产品?