передать данные ajax в модель django со связью многие ко многим - PullRequest
0 голосов
/ 14 июля 2020

Я работал над этим некоторое время, и я был в тупике. Я читал документы ...

https://www.django-rest-framework.org/api-guide/relations/#nested -отношения

и до сих пор не могу понять, как это должно работать.

Если бы кто-нибудь мог помочь мне решить эту ошибку или объяснить, как это должно работать, я был бы очень рад получить некоторую помощь. Спасибо

Что я хочу:

  1. отправить ajax на django конечную точку api rest framework
  2. иметь django / DRF сохранить многие-ко-многим связанные данные в postgreSQL db

Что у меня есть:

TypeError: Session () получил неожиданный аргумент ключевого слова 'position_list'

models.py

class Pose(models.Model):
    name = models.CharField(max_length=100, blank=False, default='')

    def __str__(self):
        return self.name

class SeshPoseList(models.Model):
    order = models.PositiveIntegerField()
    pose_fk = models.ForeignKey(Pose, on_delete=models.CASCADE)

class Session(models.Model):
    session_name = models.CharField(max_length=100, blank=False, default='')

    def __str__(self):
        return self.name

serializers.py

class PoseSerializer(serializers.ModelSerializer):
    
    class Meta:
        model = Pose
        fields = ('id', 'name')

class SeshPoseListSerializer(serializers.ModelSerializer):

    def create(self, validated_data):
        return Session.objects.create(**validated_data)

    class Meta:
        model = SeshPoseList
        fields = ['order', 'pose_fk']

class SessionSerializer(serializers.ModelSerializer):
    pose_list = SeshPoseListSerializer(many=True)

    def create(self, validated_data):
        return Session.objects.create(**validated_data)

    class Meta:
        model = Session
        fields = ('id', 'session_name', 'pose_list')

views.py

@api_view(['GET', 'POST', 'PUT', 'DELETE'])
def session_list(request):
    if request.method == 'POST':
        seshSerializer = SessionSerializer(data=request.data)
        if seshSerializer.is_valid():
            seshSerializer.create(seshSerializer.validated_data)
            return Response(seshSerializer.data, status=status.HTTP_201_CREATED)
        print("sesh errors --->  ", seshSerializer.errors)
        return Response(seshSerializer.errors, status=status.HTTP_400_BAD_REQUEST)
...