#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. Без проблем. Веселитесь!