最初,我使用初始值填充表单并禁用该字段,以便让用户知道为此表单随机选择的选项。但是我遇到了一些问题,而且在我的表单中甚至没有向用户显示这个问题似乎更好,但稍后会通过messages通知他们。虽然我不太清楚如何做到这一点。我需要在工作表单提交时为我的工作模型指定一种颜色。我有:
这是我用来选择分配给每个新工作的颜色。
cur_jobs = Job.objects.filter(enddate__gte=(datetime.date.today()-timedelta(days=7)))
all_colors = Color.objects.all()
cur_colors = []
for i in cur_jobs:
cur_colors.append(i.color)
aval_colors = [x for x in all_colors if x not in cur_colors]
choice = random.choice(aval_colors)
这些是我的模特:
class Job(models.Model):
---other stuff---
jobnum = models.CharField("Job Number",max_length=6, blank=False,unique=True,error_messages={'unique':'This Job Number is already taken! =)'})
color = models.ForeignKey('Color')
class Color(models.Model):
color = models.CharField(max_length=20, blank=False)
def natural_key(self):
return (self.color)
def __str__(self): #python 3.3. is __str__
return self.color
如何将choice
作为color
实例提交jobform
?
工作表格:
class LimitedJobForm(forms.ModelForm):
jobnum = forms.CharField(label='Job Number')
class Meta:
model = Job
fields = ['jobnum','color','client','status']
答案 0 :(得分:1)
如果您希望自动设置color
,如果您甚至不希望它显示给用户,请不要将其放在表单中:
class LimitedJobForm(forms.ModelForm):
jobnum = forms.CharField(label='Job Number')
class Meta:
model = Job
fields = ['jobnum', 'client', 'status'] # no 'color' field
相反,在验证表单之后和保存之前,直接在视图中的模型实例上设置颜色:
form = LimitedJobForm(request.POST)
if form.is_valid():
form.instance.color = pick_random_color()
form.save()