如何通过Django中的外国键将父表个体与新的子表实例相关联?

发布于 2025-02-02 13:12:38 字数 3327 浏览 1 评论 0原文

我是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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文