好吧,所以我搜索了這個高,低兩個文檔,並且谷歌上的幾乎每一頁都告訴我我的代碼應該是合法的。Django IntegrityError(1048,「Column'network_id'不能爲空」)
讓我先models.py:
class Network(models.Model):
title = models.CharField(max_length=50)
description = models.CharField(max_length=500)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.id
class NetworkForm(ModelForm):
class Meta:
model = Network
class Range(models.Model):
network = models.ForeignKey(Network)
range_start = models.GenericIPAddressField(unpack_ipv4=True)
range_end = models.GenericIPAddressField(unpack_ipv4=True)
range_title = models.CharField(max_length=50)
range_description = models.CharField(max_length=300)
def __unicode__(self):
return self.range_title
class RangeForm(ModelForm):
class Meta:
model = Range
exclude = ('network',)
然後我views.py:
@login_required(login_url='/login/')
def add_network(request):
if request.method == "POST":
net_form = NetworkForm(request.POST)
range_formset = RangeForm(request.POST)
if net_form.is_valid and range_formset.is_valid:
net_form.save(commit=False)
range_formset.network = net_form
range_formset.save()
net_form.save()
return HttpResponseRedirect('/')
else:
net_form = NetworkForm()
range_form = RangeForm()
return render_to_response('networks/add.html', {
"net_form": net_form,
"range_form": range_form,
}, context_instance=RequestContext(request))
而且我的模板:
{% extends 'base.html' %}
{% block title %}Add Network{% endblock %}
{% block content %}
<div class="row-fluid">
<div class="span7 offset2 well">
<h3>Add network:</h3>
<hr />
<form class="form-horizontal" method="post" action="">
{% csrf_token %}
{{ net_form }}
<h4>Add a range to the network:</h4>
<hr />
<div class="form-inline">
{{ range_form }}
</div>
<hr />
<button type="submit" class="btn btn-primary btn-large">Add network</button>
</form>
</div>
</div>
{%端塊%}
現在,最明顯的東西了我在這裏失蹤,只是沒有做出最後的連接。如果有人能夠啓發我,那會很棒。 PS:如果有人想知道我通過查看MySQL Workbench,MySQL Commandline客戶端和manage.py dbshell和inspectdb驗證了我的模型,那麼所有id列都存在。我甚至放棄了整個數據庫,並用manage.py重新創建了它。
它一直在磨我的齒輪大約一個星期了,所以有時間尋求幫助。如果有人願意幫我解決這個問題,那就太棒了!
這裏是回溯:
Environment:
Request Method: POST
Request URL: http://localhost:8000/network/add/
Django Version: 1.5
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django_nose',
'networks')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
115. response = callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/decorators.py" in _wrapped_view
25. return view_func(request, *args, **kwargs)
File "/home/alexander/PycharmProjects/NOC/networks/views.py" in add_network
29. range_form.save()
File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" in save
370. fail_message, commit, construct=False)
File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" in save_instance
87. instance.save()
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in save
546. force_update=force_update, update_fields=update_fields)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in save_base
650. result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py" in _insert
215. return insert_query(self.model, objs, fields, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in insert_query
1673. return query.get_compiler(using=using).execute_sql(return_id)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py" in execute_sql
937. cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py" in execute
41. return self.cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/mysql/base.py" in execute
127. six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/mysql/base.py" in execute
120. return self.cursor.execute(query, args)
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py" in execute
174. self.errorhandler(self, exc, value)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py" in defaulterrorhandler
36. raise errorclass, errorvalue
Exception Type: IntegrityError at /network/add/
Exception Value: (1048, "Column 'network_id' cannot be null")
我顯然是一個Django的初學者。雖然我改編了你所說的變化,但是錯誤仍然存在,儘管我認爲它是我的錯,因爲我曾經說過我多次檢查過數據庫,但現在認爲這是錯誤的,我看到它說:'列'network_id'不能爲空',儘管Django爲我創建的表沒有'network_id'列,它有一個名爲'id'的列。所以我再次丟棄了整個數據庫庫,使用'./manage.py syncdb'重新安裝了它,並且仍然抱怨沒有列'network_id'。任何想法如何我可以解決這個問題? –
對不起,這是什麼? network_id不能爲null,或者沒有列network_id?你在檢查哪個表 - network_id在範圍表上。 –
確切的錯誤是''列'network_id'不能爲空'「,而且你是對的,這是來自範圍表,並且是正確的。我不明白爲什麼'net_obj'沒有返回id(它應該返回1而不是Null),導致'net_form'被正確地保存到數據庫中。 –