Django вставить данные в manytomanyfield

#django

#django

Вопрос:

Я пытаюсь вставить данные с помощью запросов post, и у меня есть некоторые данные с массивом, поскольку у них есть ManyToManyField, Но при вставке данных я получаю ошибку ниже.

     _setattr(self, prop, kwargs[prop])
  File "/Users/soubhagyapradhan/Desktop/upwork/eligibility-checkr/backend/eligibility_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 536, in __set__
    raise TypeError(
TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use groups.set() instead.
  

Модель:

 class Policy(TimeStampedModel):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, verbose_name=_('id'))
    hmo = models.ForeignKey(to=HMO, on_delete=models.CASCADE, verbose_name=_('hmo'))
    name = models.CharField(max_length=250, verbose_name=_('name'))
    number = models.CharField(max_length=250, verbose_name=_('number'), unique=True)
    organization = models.ForeignKey(to=Organization, on_delete=models.CASCADE, verbose_name=_('organization'))
    groups = models.ManyToManyField(to=Group, verbose_name=_('groups'))
    enrollee = models.ManyToManyField(to=Enrollee, verbose_name=_('enrollee'))
    start_date = models.DateField()
    end_date = models.DateField()
    commencement_date = models.DateField(null=True, blank=True)
  

Вид:

 def create(self, request):
    data       = request.data
    hmo        = data.get("hmo")
    name       = data.get("name")
    number     = data.get("number")
    organization = data.get("organization")
    groups     = data.get("groups")
    enrollee   = data.get("enrollee")
    start_date = data.get("start_date")
    end_date   = data.get("end_date")
    obj = models.Policy.objects.create(
        hmo_id=UUID(hmo),
        name=name,
        number=number,
        organization_id=UUID(organization),
        groups=groups,
        enrollee=enrollee,
        start_date=start_date,
        end_date=end_date
    )
  

данные в теле, которые я отправляю методом post:

 {
    "hmo" : "600d10ec-d5b8-449e-a521-dd986408ca98",
    "name" : "soubhagya",
    "number": "9853092550",
    "organization": "ab9f7b1d-51f3-460f-ba99-2b38d9c12682",
    "groups": ["340ba243-c692-4a09-b819-af1cf3986625"],
    "enrollee":["600d10ec-d5b8-449e-a521-dd986408ca98"],
    "start_date": "2020-10-10T00:00:00",
    "end_date": "2020-10-10T00:00:00"
}
  

Комментарии:

1. какое значение отправляют эти ключи «группы»: [«340ba243-c692-4a09-b819-af1cf3986625»], «зачисляемый»: [«600d10ec-d5b8-449e-a521-dd986408ca98»],

2. Это идентификаторы uuid

Ответ №1:

Модели

 groups = models.ManyToManyField(to=Group,blank=True, verbose_name=_('groups'))
enrollee = models.ManyToManyField(to=Enrollee,blank=True, verbose_name=_('enrollee'))


def create(self, request):
    data       = request.data
    hmo        = data.get("hmo")
    name       = data.get("name")
    number     = data.get("number")
    organization = data.get("organization")
    groups     = data.getlist("groups")
    enrollee   = data.getlist("enrollee")
    start_date = data.get("start_date")
    end_date   = data.get("end_date")
    obj = models.Policy.objects.create(
    hmo_id=UUID(hmo),
    name=name,
    number=number,
    organization_id=UUID(organization),
    start_date=start_date,
    end_date=end_date
    )
    for group in groups:
        obj.groups.add(Group.objects.get(id=group)
    for enroll in enrollee:
        obj.enrollee.add(Enrollee.objects.get(id=enroll)
    obj.save()