#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()