ошибка соотношения «многие ко многим» в запросе на публикацию API - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь отправить запрос в базу данных, и я столкнулся со следующей ошибкой.

ValueError: "<Item: x>" needs to have a value for field "id" before this many-to-many relationship can be used.

вот мои модели

class Farmers(models.Model):

    First_Name = models.CharField(max_length=15)
    Last_Name = models.CharField(max_length=15)
    code =models.IntegerField(default=1)
    phone = PhoneField(blank=True, help_text='Contact phone number')


class Item(models.Model):

    category = models.CharField(max_length=20)
    ammount_in_KG = models.IntegerField(default=1)
    price = models.FloatField()
    farmer = models.ManyToManyField(
        Farmers
    )
    slug = models.SlugField(default=sluger)
    description = models.TextField(blank=True)
    image = models.ImageField(blank=True)

вот сериализаторы

class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = ['id','category', 'ammount_in_KG', 'price','farmer']


class FarmerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Farmers
        fields = ['id','First_Name', 'Last_Name','code']

вот наборы просмотра

@api_view(['POST',])
def api_create_item_view(request):

    item = Item()


    if request.method == "POST":



        serializer=ItemSerializer(item ,data=request.data)#data is gonna get changed
        data = {}
        if serializer.is_valid():
            serializer.save()
            data["success"] = "create successful"
            return Response(data=data)
        return Response(serializer.errors ,status=status.HTTP_400_BAD_REQUEST) 

я пытался отправить запрос, используя python запросы со следующими данными

post_data={"item":"x","ammount_in_KG":"6", "farmer":[1]}

я нашел в Google решение сохранить модель элемента перед добавлением фермера, но я обнаружил, что в моем случае это сбивает с толку.

Я новичок в django запросах на перезапуск и API, поэтому, пожалуйста, помогите мне.

Заранее спасибо

1 Ответ

0 голосов
/ 02 февраля 2020

Ваша проблема произошла, потому что вы не можете создать две вещи одновременно, в вашем случае ваш родитель должен быть сохранен первым - это элемент - поэтому django может использовать свой идентификатор, чтобы связать его с другим exsting идентификатор создателя через отношение M2M.

Я включил несколько примеров, касающихся M2M, в методе create в сериализаторе.

см. этот ответ. и прочитайте эту статью

...