【发布时间】:2019-03-08 13:09:57
【问题描述】:
我正在构建 django 应用程序,其中用户选择一个公司,然后应用程序通过 url 传递公司主键。然后,用户将重定向到可以查看所有公司设备的页面,并且可以将新设备添加到列表中。现在我有问题。当我提交包含所有数据的表单时,我总是得到相同的验证错误,这告诉我公司字段是必需的(我在验证之前向表单添加了外键)。我做错了什么?
views.py:
def network_devices(request, pk=None):
if pk:
if request.method == 'POST':
if 'dodajnapravo' in request.POST:
devices_form = AddNetworkDevice(request.POST)
devices_form.company = pk
if devices_form.is_valid():
devices_form.save()
return redirect(network_devices)
else:
messages.error(request, 'Vnešeni podatki niso pravilni!')
return redirect(network_devices)
elif request.method == 'GET':
devices_form = AddNetworkDevice()
devices = NetworkDevices.objects.filter(company_id=pk).all()
print(devices)
return render(request, 'interface/network_devices.html', {'device_form': devices_form, 'page_title': 'Naprave',
'devices': devices})
else:
return redirect(add_select_company)
forms.py:
class AddNetworkDevice(forms.ModelForm):
vendor = forms.CharField(required=True, label='Proizvajalec', max_length=100)
product = forms.CharField(required=True, label='Produkt', max_length=100)
version = forms.CharField(required=False, label='Verzija', max_length=50)
class Meta:
model = NetworkDevices
fields = ('__all__')
models.py:
class Company(models.Model):
class Meta:
verbose_name_plural = 'Podjetja'
company_name = models.CharField(max_length=150)
company_addres = models.CharField(max_length=500)
def __str__(self):
return str('{}').format(self.company_name)
class NetworkDevices(models.Model):
class Meta:
verbose_name_plural = 'Naprave v Omrežju'
company = models.ForeignKey(Company, on_delete=models.CASCADE)
vendor = models.CharField(max_length=100)
product = models.CharField(max_length=100)
version = models.CharField(max_length=50)
如果您能帮我解决这个问题,我将非常高兴。
【问题讨论】:
-
您在
forms.py上有 3 个 fileld,在models.py上有 4 个字段,并且您在forms.py.上指定了要在fields上使用的所有字段
标签: python django database postgresql