NOT NULL 约束失败:accounts_personalcolor.user_id
NOT NULL constraint failed: accounts_personalcolor.user_id
我是 Django 的新手,无法为 post 制作 django-rest-framework API,继承 APIView。我正在使用继承 djangos ModelSerializer 的序列化程序。每当我尝试保存序列化程序或模型对象时,我都会遇到 NOT NULL constraint failed: accounts_personalcolor.user_id 错误。
color.jspost使用Django rest框架的图片如下
function PersonalColorScreen({navigation,route}) {
const {image} = route.params;
console.log('uri is', image.uri);
const [userToken, setUserToken] = React.useState(route.params?.userToken);
const requestHeaders = {
headers: {
"Content-Type": "multipart/form-data"
}
}
// helper function: generate a new file from base64 String
//convert base64 image data to file object to pass it onto imagefield of serializer.
//otherwise, serializer outputs 500 Internal server error code
const dataURLtoFile = (dataurl, filename) => {
const arr = dataurl.split(',')
const mime = arr[0].match(/:(.*?);/)[1]
const bstr = atob(arr[1])
let n = bstr.length
const u8arr = new Uint8Array(n)
while (n) {
u8arr[n - 1] = bstr.charCodeAt(n - 1)
n -= 1 // to make eslint happy
}
return new File([u8arr], filename, { type: mime })
}
//random number between 0-9
function getRandomInt(max) {
return Math.floor(Math.random() * max);
}
// generate file from base64 string
const file = dataURLtoFile(image.uri, `${getRandomInt(10)}.png`)
const formData= new FormData();
formData.append('img',file,file.name);
console.log(file.name);
//axios post request to send data
// axios.post('http://localhost:8000/accounts/personalcolor/', formData,requestHeaders)
//multipartparser
axios.post('http://localhost:8000/accounts/personalcolor/', formData, requestHeaders)
.then(res => {
console.log(res);
if (res.data === 'upload another image') {
setimageError('upload another image');
} else {
// signUp(userToken);
let color;
switch (res.data){
case ('spring'):
color = 'spring';
break;
case ('summer'):
color = 'summer';
break;
case ('fall'):
color = 'fall';
break;
case ('winter'):
color = 'winter';
break;
}
}
})
.catch(err => {
console.error(err.response.data)
})
view.py 处理图像 posted。我试过#1,但没有用。所以我尝试了#2,或者#3,他们 return 同样的错误说 NOT NULL constraint failed: accounts_personalcolor.user_id. 我想保存序列化器或模型对象自动创建 id(Autofield),我不明白为什么我会遇到这个错误。
views.py
@api_view(['POST'])
def personalcolor(request):
# 1
image=request.FILES['img']
personal_color=Personalcolor()
personal_color.img=image
personal_color.save()
# 2
image=request.FILES['img']
personal_color=Personalcolor.objects.create(img=image)
personal_color.save()
# 3
serializer = ColorSerializer(data=request.data)
# validation of input data
if serializer.is_valid():
serializer.save()
else:
return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST)
model.py
class Personalcolor(models.Model):
objects = models.Manager()
img = models.ImageField('personal_img',upload_to="personalcolor/", blank=True)
serializer.py
class ColorSerializer(serializers.ModelSerializer):
class Meta:
model = Personalcolor
fields = ['img']
如上所述,执行代码 returns django.db.utils.IntegrityError: NOT NULL constraint failed: accounts_personalcolor.user_id. 任何帮助都会很大赞赏。
在您的 img 字段中将 null 设置为 true,例如:
img = models.ImageField('personal_img',upload_to="personalcolor/", blank=True, null=True)
然后在Personalcolor模型所在的应用程序中的迁移文件夹中,删除所有看起来像000*_initial.py
的文件
然后 运行 进行迁移并迁移
我是 Django 的新手,无法为 post 制作 django-rest-framework API,继承 APIView。我正在使用继承 djangos ModelSerializer 的序列化程序。每当我尝试保存序列化程序或模型对象时,我都会遇到 NOT NULL constraint failed: accounts_personalcolor.user_id 错误。
color.jspost使用Django rest框架的图片如下
function PersonalColorScreen({navigation,route}) {
const {image} = route.params;
console.log('uri is', image.uri);
const [userToken, setUserToken] = React.useState(route.params?.userToken);
const requestHeaders = {
headers: {
"Content-Type": "multipart/form-data"
}
}
// helper function: generate a new file from base64 String
//convert base64 image data to file object to pass it onto imagefield of serializer.
//otherwise, serializer outputs 500 Internal server error code
const dataURLtoFile = (dataurl, filename) => {
const arr = dataurl.split(',')
const mime = arr[0].match(/:(.*?);/)[1]
const bstr = atob(arr[1])
let n = bstr.length
const u8arr = new Uint8Array(n)
while (n) {
u8arr[n - 1] = bstr.charCodeAt(n - 1)
n -= 1 // to make eslint happy
}
return new File([u8arr], filename, { type: mime })
}
//random number between 0-9
function getRandomInt(max) {
return Math.floor(Math.random() * max);
}
// generate file from base64 string
const file = dataURLtoFile(image.uri, `${getRandomInt(10)}.png`)
const formData= new FormData();
formData.append('img',file,file.name);
console.log(file.name);
//axios post request to send data
// axios.post('http://localhost:8000/accounts/personalcolor/', formData,requestHeaders)
//multipartparser
axios.post('http://localhost:8000/accounts/personalcolor/', formData, requestHeaders)
.then(res => {
console.log(res);
if (res.data === 'upload another image') {
setimageError('upload another image');
} else {
// signUp(userToken);
let color;
switch (res.data){
case ('spring'):
color = 'spring';
break;
case ('summer'):
color = 'summer';
break;
case ('fall'):
color = 'fall';
break;
case ('winter'):
color = 'winter';
break;
}
}
})
.catch(err => {
console.error(err.response.data)
})
view.py 处理图像 posted。我试过#1,但没有用。所以我尝试了#2,或者#3,他们 return 同样的错误说 NOT NULL constraint failed: accounts_personalcolor.user_id. 我想保存序列化器或模型对象自动创建 id(Autofield),我不明白为什么我会遇到这个错误。
views.py
@api_view(['POST'])
def personalcolor(request):
# 1
image=request.FILES['img']
personal_color=Personalcolor()
personal_color.img=image
personal_color.save()
# 2
image=request.FILES['img']
personal_color=Personalcolor.objects.create(img=image)
personal_color.save()
# 3
serializer = ColorSerializer(data=request.data)
# validation of input data
if serializer.is_valid():
serializer.save()
else:
return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST)
model.py
class Personalcolor(models.Model):
objects = models.Manager()
img = models.ImageField('personal_img',upload_to="personalcolor/", blank=True)
serializer.py
class ColorSerializer(serializers.ModelSerializer):
class Meta:
model = Personalcolor
fields = ['img']
如上所述,执行代码 returns django.db.utils.IntegrityError: NOT NULL constraint failed: accounts_personalcolor.user_id. 任何帮助都会很大赞赏。
在您的 img 字段中将 null 设置为 true,例如:
img = models.ImageField('personal_img',upload_to="personalcolor/", blank=True, null=True)
然后在Personalcolor模型所在的应用程序中的迁移文件夹中,删除所有看起来像000*_initial.py
的文件然后 运行 进行迁移并迁移