2013-03-13 60 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

相关问题