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
Post a Comment