UPDATE問題是,我沒有正確地應用遷移之後,更改模型允許空/空值。Django Rest框架完整性錯誤保存()與is_valid()返回true
Original Post 我在使用Django-rest-framework在Vimeo視頻播放期間啓用標記數據。我已經構建了一個端點/watchtape/videotojam/
,並使用jquery將視頻的當前時間作爲start_time
VideoToJam字段發佈到端點。 即使serializer.is_valid()
返回True,我也會收到django.db.utils.IntegrityError: player_list_videotojam.video_id may not be NULL
視圖調用serializer.save()
時拋出的異常。
我不確定我在做什麼錯誤,因爲視頻外鍵關係是用blank=True, null=True
創建的,並且序列化表示表示視頻不是必填字段。
這似乎與IntegrityError in django rest framework 但是加入video = serializers.PrimaryKeyRelatedField()
到串行的修復拋出AssertionError: Relational field must provide a
查詢集argument, or set read_only=True
,當我設置read_only=True
的IntegrityError異常收益。
任何幫助將不勝感激。
串行
class VideoToJamSerializer(serializers.ModelSerializer):
class Meta:
model = VideoToJam
fields = ('id', 'start_time', 'end_time', 'video', 'jam', 'timecode_url')
型號
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 for 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))
查看
@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)
網址
urlpatterns = patterns('',
url(r'^videotojam/$', views.viewvideotojam_list, name='videotojam_list'),
)
我使用的是django 1.7,但是現在makemigration和migration現在可以正常工作,但我沒有正確設置遷移。謝謝! – Egat