Опубликуйте несколько значений в качестве внешнего ключа-Django restframework

#python #django #django-rest-framework

Вопрос:

У меня есть модель(ProfessionalMemberContacts), которая имеет первичный ключ в другой модели(MasterProfessionalMembers).

ProfessionalMemberContacts ожидает несколько или один набор сведений в соответствии с пользовательским вводом, т. е. пользователь может предоставить несколько контактных данных.

Проблема: Я не могу понять, как перебрать все контактные данные(если их несколько), чтобы сохранить их в разделе «Профессиональные контакты» со ссылкой на «Мастеров-профессионалов».

Вот мой соответствующий код для моделей и представлений для него.

Models.py

 class ProfessionalMemberContacts(models.Model):
    professionalmemberId = models.ForeignKey(MasterProfessionalMembers, default=None,on_delete=models.CASCADE, related_name="pro_contact")
    contact_person = models.CharField(max_length=100)
    contact_email = models.EmailField(max_length=100)
    contact_number = models.CharField(max_length=100)


class MasterProfessionalMembers(models.Model):
    professionalmemberId = models.CharField(primary_key=True, max_length=100, default=1)
    profile_pic = models.ImageField(blank=True)
    organization_name = models.CharField(max_length=100)
    incorp_date = models.DateField(default=date.today())
    organization_type = models.CharField(max_length=100)
 

views.py

 @api_view(['POST'])
@csrf_exempt
@permission_classes([IsAuthenticated])
def create_pro_individual_member(request):
    if request.method == "POST":
        contact_person = request.POST.getlist('contact_person')
        contact_email = request.POST.getlist('contact_email')
        contact_number = request.POST.getlist('contact_number')
        professionalmemberId =request.POST.get('professionalmemberId')
        member_object = MasterProfessionalMembers.objects.get(professionalmemberId=professionalmemberId)
            if len(contact_person) != 0:
                for p,ce,n in contact_person, contact_email, contact_number:
                    reference = ProfessionalMemberContacts(
                    contact_person = p,
                    contact_email = ce,
                    contact_number = n,
                    professionalmemberId = member_object
                    )
                    reference.save()
            return HttpResponse('professionalmember Id created as: ' professionalmemberId)
 

ИЗМЕНИТЬ: Изменил поля входных значений на request.POST.getlist(<value>)

Примечание: Ожидание данных и значений в данных формы.

Пожалуйста, предложите любой способ сохранить контактные данные, предоставленные пользователем.

Данные запроса: Тестирование в postman в виде данных формы

 professionalmemberId = 1234567
contact_person = abc
contact_email = abc@xyz.com
contact_number = 567789
contact_person = xyz
contact_email = xyz@abc.com
contact_number = 123456890
 

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

1. почему у вас есть функция create_pro_individual_member?

2. Можете ли вы поделиться данными запроса?

3. @Rarblack, это будет работать как метод публикации для ProfessionalMemberContacts

4. @bdbd Обновил сообщение с ожидаемыми данными запроса.

Ответ №1:

Попробуйте использовать zip:

 for p,ce,n in zip(contact_person, contact_email, contact_number):
    ...
 

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

1. Это сработало идеально! Большое спасибо @bdbd. Спас положение!

2. Без проблем. Веселитесь!