以下是我的模特和表格:
models.py
class Employee(models.Model):
id = models.PositiveIntegerField(primary_key=True, verbose_name='Employee Code')
name = models.CharField(max_length=200, verbose_name='Employee Name')
def get_names(self):
return Employee.objects.values_list('name', 'name')
class JobQueue(models.Model):
emp_name = models.ForeignKey(Employee, on_delete=models.CASCADE)
product_code = models.ManyToManyField(Product)
forms.py
class JobQueueForm(forms.ModelForm):
emp = Employee()
prod = Product()
emp_name = forms.ChoiceField(choices = emp.get_names)
product_code = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=prod.get_products)
def save(self, commit=True):
return super(JobQueueForm, self).save(commit = commit)
class Meta:
model = JobQueue
fields = ('emp_name', 'product_code')
当我尝试从JobQueue表单添加新员工时,出现以下错误:
/ admin / timesheet / jobqueue / add /的ValueError 无法分配"' some_name'":" JobQueue.emp_name"必须是"员工"实例
知道我在这里做错了吗?
答案 0 :(得分:0)
你有一个名字冲突,基本上,这是一个红色的鲱鱼为你调试。
您的表单中有emp_name
ChoiceField
(字符串)但是当您将表单保存到数据库时,支持模型JobQueue
期待emp_name
为save
一个雇员的实例。
在您的情况下,您需要覆盖表单中的emp_name
方法,该方法已经显示您已经执行的操作,并在那里获取覆盖def save(self, commit=True):
self.emp_name = Employee.objects.get(name=self.cleaned_data['emp_name'])
return super(JobQueueForm, self).save(commit=commit)
并保存它的员工。
{{1}}