python - Django Rest Framework Integrity Error on save() with is_valid() returning true -


update issue was not correctly applying migrations after changing model allow null/blank values.

original post i'm using django-rest-framework enable tagging data during playback of vimeo videos. i've built endpoint @ /watchtape/videotojam/ , using jquery post endpoint using current time of video start_time videotojam field. i'm getting django.db.utils.integrityerror: player_list_videotojam.video_id may not null exception thrown when view calls serializer.save(), though serializer.is_valid() returns true.

i'm not sure i'm doing wrong, since video foreign key relationship created blank=true, null=true , serializer representation indicates video not required field.

this seems related integrityerror in django rest framework fix of adding video = serializers.primarykeyrelatedfield() serializer throws assertionerror: relational field must provide aquerysetargument, or set read_only=true , when set read_only=true integrityerror exception returns.

any appreciated.

serializer

class videotojamserializer(serializers.modelserializer):     class meta:         model = videotojam         fields = ('id', 'start_time', 'end_time', 'video', 'jam', 'timecode_url') 

model

class videotojam(models.model):     start_time = models.charfield(max_length=200,                               validators=[_timecode_validator])     end_time = models.charfield(max_length=200,                             validators=[_timecode_validator],                              blank=true)     video = models.foreignkey(video, blank=true, null=true)     jam = models.foreignkey(jam, null=true, blank=true)     timecode_url = models.urlfield(max_length=255, blank=true)  class video(models.model):     sites = (              ('vimeo', '''http://vimeo.com'''),              ('youtube', '''http://youtube.com'''),              ('', 'unknown'),             )      url = models.urlfield(max_length=255)     source = models.charfield(max_length=200)      site = models.charfield(max_length = 7, choices=sites)     #url vimeo embed code     player_url = models.charfield(max_length=2000)      def get_absolute_url(self):         return(reverse("video_player", kwargs={'video_id':self.id}))      def __str__(self):         return("video {0}".format(self.id)) 

view

@api_view(['get', 'post']) def viewvideotojam_list(request):     if request.method == 'post':         serializer = videotojamserializer(data=request.data)         if serializer.is_valid():             serializer.save()             return response(serializer.data, status=status.http_201_created)     return response(serializer.errors, status=status.http_400_bad_request)      videotojams = videotojam.objects.all()     serializer = videotojamserializer(videotojams, many=true)     return response(serializer.data) 

urls

urlpatterns = patterns('',     url(r'^videotojam/$', views.viewvideotojam_list, name='videotojam_list'),     ) 

setting blank=true, null=true should enough. null=true causes schema change, did generate migration it?

if you're on django prior 1.7 , you're using south, should run migrate , schemamigration.

if you're on django 1.7 or greater, should run migrate , makemigrations.


Comments