2013-03-13 66 views
0

有人可以幫助我解決這個問題。我對此很新,現在有點空白。我知道也許它只是一個愚蠢的問題,但老實說我卡住了。Django錯誤:solution_building.ID_CUSTOMER_id可能不是NULL

我得到這個錯誤:

Exception Type: IntegrityError at /building/

Exception Value: solution_building.ID_CUSTOMER_id may not be NULL

我在做什麼錯在這裏

views.py

class buildingView(UpdateView): 
template_name="building.html" 
model = building 
form_class = buildingForm 

def get_context_data(self, **kwargs): 
    context = super(buildingView, self).get_context_data(**kwargs) 

    context['pk'] = 1 
    context['numberOfObjects'] = building.objects.all().count() 

    return context 

def get_object(self, queryset = None): 
    try: 
     obj = building.objects.get(id = 1) 
    except: 
     obj = building.objects.create(id = 1) 
    return obj 

def form_valid(self, form): 

    form.save() 
    return HttpResponseRedirect(reverse("building_view", kwargs={'pk': self.kwargs['pk']})) 

,當我做蟒蛇manage.py SQL我得到這個

CREATE TABLE "solution_building" (
"id" integer NOT NULL PRIMARY KEY, 
"ID_CUSTOMER_id" integer NOT NULL REFERENCES "solution_customer" ("id"), 
"BUILDING_USE" varchar(2) NOT NULL, 
"BUILDING_FLOORSPACE" integer, 

Ne幫助。非常感謝。

model.py

class building(models.Model): 
id     = models.AutoField(primary_key = True) 
ID_CUSTOMER   = models.ForeignKey(customer) 
BUILDING_USE   = models.CharField(max_length = 2, blank = True, choices = c.Anvendelse) 
BUILDING_FLOORSPACE = models.IntegerField(null = True, blank = True) 
def __unicode__(self): 
    return '%s' % (self.ID_CUSTOMER) 
+1

可以告訴你你的模型?異常值:solution_building.ID_CUSTOMER_id可能不爲NULL 意味着您輸入的值不應爲空值。在這種情況下,你似乎在引用一個外鍵,但是你沒有爲外鍵值「ID_CUSTOMER_id」插入值。 – stupidbodo 2013-03-13 11:27:41

+0

Thks @RyanLiao是的,我發佈了models.py。我如何使它能夠接受也是空的? – noobes 2013-03-13 11:33:43

+0

你ID_Customer必須也爲空=真和空白=真 – catherine 2013-03-13 11:35:27

回答

4

的錯誤是從這裏:

def get_object(self, queryset = None): 
    try: 
     obj = building.objects.get(id = 1) 
    except: 
     obj = building.objects.create(id = 1) <---- here 
    return obj 

你想創建一個id新建築數據?

根據您的建築物表,ID_CUSTOMER,BUILDING_USE和BUILDING_FLOORSPACE所需的值。所以當你試圖創建新的建築時會引發錯誤。

UPDATE:

class building(models.Model): 
    #id = models.AutoField(primary_key = True) --> you don't need this, the system automatically create id 
    CUSTOMER = models.ForeignKey(customer, null=True, blank=True) 
    BUILDING_USE = models.CharField(max_length=2, 
     blank=True, choices=c.Anvendelse, default="base on choices") 
    BUILDING_FLOORSPACE = models.IntegerField(default=0) 

    def __unicode__(self): 
     return '{0}' % (self) 
+0

確定thks @catherine。我該怎麼辦,如果它也會接受新建築? – noobes 2013-03-13 11:37:55

+0

ID_Customer也必須爲null = True且空白= True。刪除數據庫並再次同步 – catherine 2013-03-13 11:47:24

+0

thks @catherine ...完成它,現在我得到另一個錯誤'Cananot assign「u''」:「building.ID_CUSTOMER」必須是「客戶」實例。'...這是什麼意思?? – noobes 2013-03-13 11:49:15

相關問題