2013-04-07 19 views
0

我在與增加現有模型的客戶的新副本,它看起來像煩惱:IntegrityError在非現有字段

class Client(models.Model): 
    user = models.OneToOneField(User) # Extending default user model 
    organization = models.CharField(max_length=40) 
    def __unicode__(self): 
     return self.user.first_name + " " + self.user.last_name 

林進入外殼並鍵入此:

from django.contrib.auth.models import User 
from mysiteApp.models import Client 

user = User.objects.get(pk=2) # User with pk 2 exists 
client = Client(user=user, organization="someorg") # copy creates succesfully 

但隨後,即時通訊試圖通過 client.save()

保存副本,並即時得到這樣的:

>>> client.save() 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 537, in save 
    force_update=force_update, update_fields=update_fields) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 641, in save_base 
    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", line 215, in _insert 
    return insert_query(self.model, objs, fields, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 1559, in insert_query 
    return query.get_compiler(using=using).execute_sql(return_id) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 844, in execute_sql 
    cursor.execute(sql, params) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 41, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py", line 389, in execute 
    six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2]) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py", line 387, in execute 
    return Database.Cursor.execute(self, query, params) 
IntegrityError: mysiteApp_client.cID may not be NULL 

的事情是,我在客戶端模型之前,有這樣的字段作爲CID,至極真的有NOT NULL,但現在我不

manage.py SQL mysiteApp顯示:

BEGIN; 
CREATE TABLE "mysiteApp_client" (
    "id" integer NOT NULL PRIMARY KEY, 
    "user_id" integer NOT NULL UNIQUE REFERENCES "auth_user" ("id"), 
    "organization" varchar(40) NOT NULL 
) 
; 

manage.py syncdb沒有改變,我該怎麼辦? 謝謝。

回答

3

您的數據庫仍處於需要cID字段的狀態。這是因爲syncdb不會改變已經存在的表。

爲了解決你的問題,你有三種選擇:

一)刪除該客戶端表(=丟失數據)在數據庫中,然後再次運行syncdb

b)使用SQL ALTER TABLE手動修改數據庫命令

c)使用類似Southintroduction)的遷移工具來反映您爲數據庫中的models.py所做的更改。我會建議學習如何處理南方,因爲一旦你在生產中,你可能需要這樣的移植工具。

+0

刪除和重新創建表解決了這個問題,非常感謝。 – edikwow 2013-04-07 14:17:18