Как вставить данные в дочернюю таблицу из react в модели django rest framework

Я новичок в React и Django rest framework. Я хочу вставить данные профиля в модель Django, используя fetch API в react. Я постоянно получаю заголовок ответа в виде:

{"user":["Неверный тип. Ожидалось значение pk, получено str."]}

Я проверил, распечатав ответ на консоли, и он выдает код состояния '200 OK'. Но база данных также не обновляется.

Моя функция отправки формы в react следующая:

    const handleSubmit = (e) => {
        e.preventDefault();
        const profile = profileObj(selectedProfileImg, contact, city, country, address);
        localStorage.setItem('profile', JSON.stringify(profile))
        let form_data = new FormData()
        // *************************
        // this is the foreign key in the model and it gives the problem.
        // *************************
        form_data.append('user',JSON.parse(localStorage.getItem('data')).id) // (foriegn key value) User added by signing up 
        form_data.append('profile_img', profile.prof_img)
        form_data.append('contact',profile.contact)
        form_data.append('city',profile.city)
        form_data.append('country',profile.country)
        form_data.append('address',profile.address)
        form_data.append('store_title','storename') // (foriegn key value) Data with this key exists in database
        form_data.append('cus_status',profile.cus_status)

        fetch('http://localhost:8000/customer_apis/addCustomer/', {
            method: 'POST',
            headers: {
                'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
            },
            body: form_data
        })
            .then(res => {
                console.log(res)
                console.log(res.status)
                if (res.status !== 200)
                    document.getElementById('text-error').innerHTML = res.statusText
                else {
                    navigate('/create_store')
                }
            })
    }

Моя модель Django такова:

class CustomerData(models.Model):
    CUS_STATUS=(
        ('A','Active'),
        ('B','Blocked'),
        ('X','Blacklist')
    )
    # I imported the user as (from django.contrib.auth.models import User)
    user=models.ForeignKey(User, on_delete=models.CASCADE)
    store_title=models.ForeignKey(StoreData, on_delete=models.CASCADE, null=True, default='')
    city=models.CharField(max_length=50, default="")
    country=models.CharField(max_length=50, default="")
    address=models.CharField(max_length=200, default="")
    phone=models.IntegerField(default=00)
    profile_img=models.ImageField(upload_to=user_directory_path, blank=True,null=True)
    cus_status=models.CharField(max_length=20,choices=CUS_STATUS, default='A')

    def __str__(self):
        return str(self.store_title)

А представление API Django таково:

@api_view(['POST','GET'])
def addCustomer(request):
    serializer = CustomerSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response("Success")
    else:
        return Response(serializer.errors)

Как я могу добавить данные в дочернюю таблицу с внешними ключами из React Apis в Django rest Framework? Любая помощь будет очень признательна.

Думаю, вам нужно использовать какое-то другое поле для загрузки user и store_title данных.

class CustomerSerializer(serializers.ModelSerializer):
    user_id = serializers.IntegerField(write_only = True)
    store_title_id = serializers.IntegerField(write_only = True) 
    user = UserSerializer(read_only = True)
    store_title = StoreTitleSerializer(read_only = True)

    class Meta:
        model = CustomerData
        fields=("user", "store_title", "city", "country", "address", "phone", "profile_img", "cus_status", "user_id", "store_title_id", ) 

В frontend вы можете загрузить user_id и store_title_id как целочисленное значение.

const handleSubmit = (e) => {
    ...
    form_data.append('user_id', parseInt(JSON.parse(localStorage.getItem('data')).id, 10)) 
    ...
    form_data.append('store_title_id', 1) # for example
    ...
Вернуться на верх