动态模型表单字段

时间:2018-03-04 08:59:35

标签: django forms dynamic model field

我有一个模型formset。基本模型中的一个字段是charfield。我需要这个字段根据表单进行不同的选择。即在形式集中,某些形式将有选择a,b& c和其他人将有选择e,f和g。尽管阅读了Django文档以及堆栈溢出的几个Q& A,但我仍然处于亏损状态。

Django文档说:

Note that choices can be any iterable object – not necessarily a list or tuple. This lets you construct choices dynamically. 

但是,它没有举例说明如何做到这一点。如果有人能举个例子,我将不胜感激。

我的模特:

class Item(models.Model):
    budgetcatagory=models.ForeignKey(BudgetCatagory, on_delete=models.CASCADE)
    name=models.CharField(max_length=50)
    enName=models.CharField(max_length=30, default ="")
    detail=models.CharField(max_length=30)
    layout=models.CharField(max_length=30, default="normal")
    unit=models.CharField(max_length=30)
    unit_description=models.CharField(max_length=30, default="")
    unit_price=models.IntegerField(default=0)
    QTY=models.IntegerField(default=0)
    param1=models.CharField(max_length=30, blank=True)
    param2=models.CharField(max_length=30, blank=True)
    param3=models.CharField(max_length=30, blank=True)
    param4=models.IntegerField(default=0)
    parent=models.CharField(max_length=50, default = "0")
    cost_ave=models.IntegerField(default=0, blank=True)
    cost_min=models.IntegerField(default=0, blank=True)
    cost_max=models.IntegerField(default=0, blank=True)
    total_cost=models.IntegerField(default=0)
    objects=ItemManager()

    def __str__(self):
        return self.name

通过对象管理器中的以下代码构建实例:

def normalCreate(self, cat, parent, name, description, unit, U, enName, Param1, Param2, Layout, min_val, max_val, ave_val):

    #import pdb
    #pdb.set_trace()

    if parent=="פיתוח":
        q=House.objects.get(user_id=U.id).plot_size
    else:
        q=House.objects.get(user_id=U.id).area
    I=self.create(budgetcatagory_id=cat.id, name=name, unit=unit, detail='Low', unit_description=description , parent=parent, QTY=q, unit_price=ave_val, total_cost=ave_val*q, enName=enName, cost_min=min_val, cost_max=max_val, cost_ave=ave_val )
    I.save()
    return I

我想在normalCreate中添加一些代码,在某些条件下,它会为param1创建一个选择列表,它将在模板中呈现。重要的是,对我来说,对选择进行验证并不重要。

由于

0 个答案:

没有答案