如何使用提交一对多表单

How to use a submit a one-to-many form

我有一份在站点工作的员工列表。每个站点都由一个用户拥有(使用 Django 的标准用户模型)。

我想创建一个表单来添加员工并自动将他们链接到一个站点,具体取决于经过身份验证的用户是谁:

models.py:

class Employee(models.Model):
    site = models.ForeignKey(Site, null=True)
    employee_name = models.CharField(default='name', max_length=128, blank=False, null=False)

class Site(models.Model):
    user = models.ForeignKey(User)
    site_name = models.CharField(max_length=128, blank=False, null=False)

views.py:

site_profile = Site.objects.get(user=request.user)

if request.method == "POST":
    form = EmployeeAddForm( request.POST )
    if form.is_valid():

        obj = form.save(commit=False)
        obj.site = site_profile
        obj.save()

        return redirect('dashboard_home')

form = EmployeeAddForm()

return render(request, "dashboard/employees.html",  {'form': form })

forms.py:

class EmployeeAddForm(forms.ModelForm):
      class Meta:
            model = Employee
            fields = ( 'employee_name')

此代码会将员工添加到数据库中,但在 django admin 中,list_display = 'site' 导致 Site object 不是实际的站点名称。该员工似乎没有链接到该站点。

如果我使用 obj.site = site_profile.id(添加 .id),我会得到错误 Cannot assign "1": "Employee.site" must be a "Site" instance.

发现错误:上面的代码是正确的,我只是在我的站点模式中出现了标签顺序错误L

class Site(models.Model):
...

def __str__(self):
    return self.site_name

def 应该向内插入 1 个标签。