dajee
dajee

Reputation: 964

Python/Django Beginner

I'm new to web-developing, I get:

IntegrityError at /map/rebuild/

null value in column "snow_Depth" violates not-null constraint

do you see anything I'm doing wrong in this function? Are my moves illegal?

imports.py:

1 from django.contrib.gis.geos import Point
2 from models import *
3 from apps.pages.models import *
4 from decimal import *
5 from datetime import *
6 import string
7 
8 def add_points():
9     response = ""
10     all_data_entries = DataEntry.objects.all()
11     point_layers = PointLayer.objects.all()
12 
13     PointLayer.objects.all().delete()
14     size = 1
15 
16     for this_data_entry  in all_data_entries:
17         point_layer = point_layers.create( pk=size )
18         point_layer.albedo = this_data_entry.albedo
19         point_layer.snow_Density = this_data_entry.snow_density
20         point_layer.snow_Depth = this_data_entry.snow_Depth
21 
22         ret = this_data_entry.station_Number
23 
24         if ret == "CH15":
25             point_layer.lat = 43.067657
26             point_layer.lon = 72.218724
27         if ret == "SL8":
28             point_layer.lat = 43.420129
29             point_layer.lon = 72.09098
30         if ret == "RC13":
31             point_layer.lat = 43.0159
32             point_layer.lon = 70.8272
33         if ret == "GR4":
34             point_layer.lat = 44.1467
35             point_layer.lon = 71.965
36         if ret == "CS7":
37             point_layer.lat = 44.49611
38             point_layer.lon = 71.57639
39         if ret == "MR11":
40             point_layer.lat = 43.284896
41             point_layer.lon = 71.92525
42         if ret == "CS11":
43             point_layer.lat = 44.373681
44             point_layer.lon = 71.613242
45         if ret == "MR4":
46             point_layer.lat = 43.149944
47             point_layer.lon = 71.556467
48         if ret == "GR11":
49             point_layer.lat = 43.760317
50             point_layer.lon = 71.688856
51         if ret == "CR1":
52             point_layer.lat = 43.6037
53             point_layer.lon = 70.9867
54         if ret == "ST21":
55             point_layer.lat = 43.2356
56             point_layer.lon = 71.082296
57         if ret == "HL25":
58             point_layer.lat = 42.914089
59             point_layer.lon = 71.610217
60         if ret == "MR6":
61             point_layer.lat = 43.52
62             point_layer.lon = 71.819
63         if ret == "RC29":
64             point_layer.lat = 42.9007
65             point_layer.lon = 71.192591
66         if ret == "CH4":
67             point_layer.lat = 42.9395
68             point_layer.lon = 72.3284
69         if ret == "CR7":
70             point_layer.lat = 43.929483
71             point_layer.lon = 71.084079
72         if ret == "CS10":
73             point_layer.lat = 44.388238
74             point_layer.lon = 71.269535
75         if ret == "HL48":
76             point_layer.lat = 42.776745
77             point_layer.lon = 71.77992
78         point_layer.site = ret
79         point_layer.geometry = Point( float( point_layer.lon ), float (point_layer.lat ) )
80         size += 1
81         point_layer.get( pk=1 ).save( commit = False )

views.py

1 from django.http import HttpResponse, HttpResponseRedirect
2 from django.shortcuts import render_to_response
3 from django.template import RequestContext
4 from models import *
5 from apps.pages.models import DataEntry
6 
7 def map( request ):
8     return render_to_response('map/map.html',{},context_instance=RequestContext(request))
9 
10 def rebuild( request ):
11     import imports
12     imports.add_points()
13     return HttpResponseRedirect( '/map/' )
14 
15 def all( request ):
16     points = PointLayer.objects.all(a).kml()
17     return render_to_response("kml/main.kml", {
18         'geometries': points
19     }, context_instance=RequestContext( request ))

Thanks in advance

Upvotes: 0

Views: 155

Answers (1)

Burhan Khalid
Burhan Khalid

Reputation: 174708

I'm not sure what you are trying to do, but your immediate error is from this line:

point_layer = point_layers.create( pk=size )

When you use create, you need to make sure all required fields for the model are passed into the method since it creates and saves the object.

Since you are not passing a required field snow_Depth, it fails when it tries to save.

You can either pass all the required fields to create, or set them manually then save the object:

point_layer = PointLayer()
point_layer.pk = size
# .. other various fields
# Replace point_layer.get( pk=1 ).save( commit = False ) with:
point_layer.save()

The above solves your problem, but...

I think you might be trying to update some PointLayer objects - from your last line point_layer.get( pk=1 ).save( commit = False )

If that's the case, then you really want to replace:

point_layer = point_layers.create( pk=size ) with:

point_layer = PointLayer.objects.get(pk=size)

However, since you have deleted all the objects with this line PointLayer.objects.all().delete(), perhaps that's not the case.

Clarify what you intend to do.

Upvotes: 1

Related Questions