我有一个模型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创建一个选择列表,它将在模板中呈现。重要的是,对我来说,对选择进行验证并不重要。
由于