如何通过Django中的外国键将父表个体与新的子表实例相关联?
我是Django和ReactJ的新手。我正在创建具有Django模型中外键关系的模型。但是,当我将数据发送到我的Django REST API时,它会根据外键值创建父表对象,而不是将其与现有值相关联。我如何与新创建的儿童实例相关联而不是创建父对象?
我正在寻找过去的两天,但对我没有任何帮助。我在做什么错?
它为我的ReactJS应用程序提供了此响应标题:
{“ store_title”:[“已经存在此商店标题的数据。”]}
数据
def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT / user_<id>/<filename>
return 'user_{0}/{1}'.format(instance.user, filename)
class StoreData(models.Model):
STATUS=(
('A','Active'),
('P','Pending approval'),
('B','Blocked'),
)
store_title=models.CharField(max_length=50,primary_key=True, null=False)
tagline=models.CharField(max_length=100,null=False, default='')
store_type=models.CharField(max_length=10,null=False, default='')
description=models.CharField(max_length=500,null=False, default='')
user=models.ForeignKey(User,on_delete=models.CASCADE,null=True)
logo_img=models.ImageField(upload_to=user_directory_path, default='')
brand_img=models.ImageField(upload_to=user_directory_path, default='')
link=models.CharField(max_length=100, default='')
date_created=models.DateField(default=timezone.now)
status=models.CharField(max_length=20,choices=STATUS,default='A')
def __str__(self):
return str(self.store_title)
class Categories(models.Model):
title=models.CharField(max_length=50, default='none')
thumbnail_img=models.ImageField(upload_to=user_directory_path, default="")
store_title=models.ForeignKey(StoreData, on_delete=models.CASCADE, default='')
def __str__(self):
return str(self.title)
。
class StoreSerializer(serializers.ModelSerializer):
class Meta:
model = StoreData
fields = '__all__'
class CategorySerializer(serializers.ModelSerializer):
def __init__(self, data):
self.store_title=serializers.SlugRelatedField(queryset=StoreData.objects.filter(pk=data['store_title']))
class Meta:
model = Categories
fields = '__all__'
“
@api_view(['POST'])
def addCategory(request):
serializer=CategorySerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response("success", status.HTTP_200_OK)
else:
return Response(serializer.errors,status.HTTP_405_METHOD_NOT_ALLOWED)
{
function handleSubmit(e) {
e.preventDefault()
let category_data = new FormData()
category_data.append('title', title)
category_data.append('thumbnail_img', selectedThumb_Img)
category_data.append('store_title', JSON.parse(localStorage.getItem('store_data')).title)
fetch('http://localhost:8000/store_apis/addCategory/', {
method: 'Post',
body: category_data
})
.then(res => {
if (res.status !== 200)
document.getElementById('text-error').innerHTML = res.Text
else {
navigate('/categories')
}
})
.catch((res) => document.getElementById('text-error').innerHTML = res.statusText)
}
store_title” : 现有带有新创建的儿童实例的父型实例?
谢谢
I'm new to Django and reactJS. I'm creating models with foreign key relationships in Django models. But when I send data from React to my Django rest API, it creates the parent table object on the basis of a foreign key value instead of associating it with the existing value. How can I associate with the newly created child instance instead of creating the parent object?
I'm searching for the last 2 days but nothing worked for me. What I'm doing wrong?
It gives me this response header in my reactJS application:
{"store_title":[" store data with this store title already exists."]}
My models are:
def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT / user_<id>/<filename>
return 'user_{0}/{1}'.format(instance.user, filename)
class StoreData(models.Model):
STATUS=(
('A','Active'),
('P','Pending approval'),
('B','Blocked'),
)
store_title=models.CharField(max_length=50,primary_key=True, null=False)
tagline=models.CharField(max_length=100,null=False, default='')
store_type=models.CharField(max_length=10,null=False, default='')
description=models.CharField(max_length=500,null=False, default='')
user=models.ForeignKey(User,on_delete=models.CASCADE,null=True)
logo_img=models.ImageField(upload_to=user_directory_path, default='')
brand_img=models.ImageField(upload_to=user_directory_path, default='')
link=models.CharField(max_length=100, default='')
date_created=models.DateField(default=timezone.now)
status=models.CharField(max_length=20,choices=STATUS,default='A')
def __str__(self):
return str(self.store_title)
class Categories(models.Model):
title=models.CharField(max_length=50, default='none')
thumbnail_img=models.ImageField(upload_to=user_directory_path, default="")
store_title=models.ForeignKey(StoreData, on_delete=models.CASCADE, default='')
def __str__(self):
return str(self.title)
My serializers are:
class StoreSerializer(serializers.ModelSerializer):
class Meta:
model = StoreData
fields = '__all__'
class CategorySerializer(serializers.ModelSerializer):
def __init__(self, data):
self.store_title=serializers.SlugRelatedField(queryset=StoreData.objects.filter(pk=data['store_title']))
class Meta:
model = Categories
fields = '__all__'
And my rest API is:
@api_view(['POST'])
def addCategory(request):
serializer=CategorySerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response("success", status.HTTP_200_OK)
else:
return Response(serializer.errors,status.HTTP_405_METHOD_NOT_ALLOWED)
And I'm sending a request from React like this:
function handleSubmit(e) {
e.preventDefault()
let category_data = new FormData()
category_data.append('title', title)
category_data.append('thumbnail_img', selectedThumb_Img)
category_data.append('store_title', JSON.parse(localStorage.getItem('store_data')).title)
fetch('http://localhost:8000/store_apis/addCategory/', {
method: 'Post',
body: category_data
})
.then(res => {
if (res.status !== 200)
document.getElementById('text-error').innerHTML = res.Text
else {
navigate('/categories')
}
})
.catch((res) => document.getElementById('text-error').innerHTML = res.statusText)
}
How can I associate the existing parent instance with the newly created child instance?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论