如何使用提交一对多表单
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 个标签。
我有一份在站点工作的员工列表。每个站点都由一个用户拥有(使用 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 个标签。