tAutomatedTranslation: ModelForm 在Django中的外键不会工作

2024-09-29 23:26:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下型号:

class Business(models.Model):
    business_name = models.CharField(max_length=100)

    def __str__(self):
        return self.business_name

class Employee(models.Model):
    employee_name = models.CharField(max_length=100)
    business = models.ForeignKey(Business, blank=True)

我试图制作一个表单,让用户输入一个雇员。每个用户只有一个业务,每个业务可以有多个员工。我正试图让表单保存员工和企业名称。我已经设法让表单显示一个雇员的文本字段和一个企业名称的下拉列表。但是,当表单在视图中由以下代码处理时,它不会用指向业务的链接保存员工——即使在dropwdown菜单中选中了该业务,该业务也会显示为null。你知道吗

def business_home(request):
    b = Business.objects.get(business_name='Cleaners')
    context_dict = {
                    'employee_name_form': EmployeeNameForm(initial={'business': b})}
    if request.method == 'POST':
        form = EmployeeNameForm(data=request.POST)
        if form.is_valid():
            print(form.cleaned_data)
            print(form.save())

            w = form.save()
            w.business.save()
            w.save()

尽管当我在表单中打印清理后的数据时,很明显它同时读取了员工和业务数据,并且表单保存()返回我想写入数据库的对象——与正确业务链接的雇员。你知道吗

你知道为什么它不能节省吗?你知道吗

这是我的表格:

class EmployeeNameForm(forms.models.ModelForm):

    class Meta:
        model = Employee
        fields = ('employee_name', 'business')
        widgets = {
            'employee_name': forms.fields.TextInput(attrs={
                'placeholder': 'Enter the name of the employee you wish to add',
                'class': 'form-control input-lg',
                }),
        }

    def __init__(self, *args, **kwargs):
        super(EmployeeNameForm, self).__init__(*args, **kwargs)

Tags: nameselfform表单modelssavedef员工

热门问题