Reputation: 964
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
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