Django在现有形式上多对多

时间:2014-04-30 18:37:13

标签: python django django-models django-forms many-to-many

我在WorkingHours我定义了2个表EmployeeEmployee workingHours = models.ManyToManyField(WorkingHours)。 我的EmployeeWorkingHours拥有User的外键。

现在我有一些表格可以添加一个WorkingHour(在某个用户下),我希望添加一个用户可以在他的Employees之间多次选择的现有表单。

所以我有现有的表单,用户可以添加WorkingHours,现在我想添加一个他可以在Employees之间选择的选项。 现在实现只为一些用户添加WorkingHours,我想添加一个选项来在他的员工之间进行选择,我不知道如何做到这一点。

因此,为了更好地理解,我有用户,WorkingHours并且我想添加该用户可以选择Employee“在此WorkingHours上工作”。如果取消选中所有字段,我想应用Employees

的所有WorkingHour

我希望它不会太复杂,如果是,我会尝试在评论中解释更多。

我正在研究现有项目,所以我不想改变很多代码。

感谢名单

1 个答案:

答案 0 :(得分:0)

我想我理解基本问题。您需要一个多选项字段,该字段由与该用户关联的员工填充。

查看here了解一些细节/示例。

基本上你想要这样的东西,这个例子不做任何事情,但我希望它是一个开始。

class SimpleForm(forms.Form):
    employees = forms.MultipleChoiceField(required = False, widget=forms.SelectMultiple)

def __init__(self, *args, **kw)
    user = kw.pop('user') # you need to pass user to into this function as a kw argument
    super(SimpleForm, self).__init__(*args, **kw)
    # this asssumes the user as a field (or related field reference) to employees
    # either way somehow you need to execute a query which gets the users employees.
    self.fields['employees'].choices = user.employees.all()

def save(self, *args):
    # if employees is empty set them all to selected