Проблемы с обновлением формы Django информацией из другой модели

В основном я создаю функциональность для обновления формы значениями из одной таблицы в моем models.py, форма будет заполнять начальные значения из этой таблицы (leads) и после отправки информации, форма будет заполнять другую модель (leads)

Вот мой models.py

class Leads(models.Model):

    project_id = models.BigAutoField(primary_key=True, serialize=False)
    created_at = models.DateTimeField(auto_now_add=True)
    expected_revenue = MoneyField(decimal_places=2,max_digits=14, default_currency='USD')
    expected_licenses = models.IntegerField(blank=True)
    country = CountryField(blank_label='(select_country)')
    status = models.CharField(choices=[('Open', 'Open'), ('Closed', 'Closed'), ('Canceled', 'Canceled')], max_length=10)
    estimated_closing_date = models.DateField(blank=True)
    services = models.CharField(choices=[('Illumination Studies', 'Illumination Studies'),
                                  ('Training', 'Training'),('Survey Design Consultancy', 'Survey Design Consultancy'),
                                  ('Software License', 'Software License'),
                                  ('Software Development','Software Development')], max_length=40)
    agent = models.ForeignKey(Profile, default='agent',on_delete=models.CASCADE)
    company = models.ForeignKey(Company,on_delete=models.CASCADE)
    point_of_contact = models.ForeignKey(Client, default='agent',on_delete=models.CASCADE)
    updated_at = models.DateTimeField(auto_now=True)

class Deal(models.Model):
    project_id = models.ForeignKey(Leads, on_delete=models.CASCADE, default='id')
    agent = models.ForeignKey(Profile, on_delete=models.CASCADE, default="agent")
    service = models.ForeignKey(Leads, on_delete=models.CASCADE, related_name='service')
    closing_date = models.DateField(auto_now_add=True)
    client = models.ForeignKey(Client, on_delete=models.CASCADE,default='client')
    licenses = models.ForeignKey(Leads,on_delete=models.CASCADE, related_name='license')
    revenue = MoneyField(max_digits=14, decimal_places=2, default_currency='USD')
    comments = models.TextField(blank=True,null=True)
    company = models.ForeignKey(Company, on_delete=models.CASCADE)



Forms.py

class NewDealForm(forms.ModelForm):
    class Meta:
        model = Deal
        fields = ['project_id','agent','client','company','service', 'licenses','revenue','comments']


@login_required
def close_lead(request):
    if request.method == 'POST':

        deal_form = NewDealForm(request.POST)
        print(deal_form)
        if deal_form.is_valid():
            deal_form.save()
            messages.success(request, 'You have successfully updated the status from open to Close')
            id = request.GET.get('project_id', '')
            obj = Leads.objects.get(project_id=id)
            obj.status = "Closed"
            obj.save(update_fields=['status'])

            return HttpResponseRedirect(reverse('dashboard'))
        else:

            messages.error(request, 'Error updating your Form')
    else:
        id = request.GET.get('project_id', '')
        obj = get_object_or_404(Leads, project_id=id)

        m = obj.__dict__
        keys = Leads.objects.get(project_id=m['project_id'])

        form_dict = {'project_id': keys.project_id,
                     'agent': keys.agent,
                     'client': keys.point_of_contact,
                     'company': keys.company,
                     'service': keys.services,
                     'licenses':keys.expected_licenses
                     }
        print(form_dict)
        form = NewDealForm(request.POST or None, initial=form_dict)

    return render(request,
                  "account/close_lead.html",
                  {'form': form})

Мой вопрос в том, почему все значения заполнены, кроме поля service?

Service field not populated

У кого-нибудь есть идеи, вывод моего словаря выглядит правильно, и он содержит информацию для сервиса, но почему-то это не передается в форму?

{'project_id': 1, 'agent': <Профиль: fcolina>, 'client': <Клиент: Zack M.>, 'company': <Компания: E3>, 'service': 'Software License', 'licenses': 3}

Как видите, услуга имеет фактическое значение

В вашей модели Deal поле services является внешним ключом к Leads:

class Deal(models.Model):
    service = models.ForeignKey(Leads)

И вы пытаетесь заполнить его значением поля services в Leads, которое является строкой.

class Leads(models.Model):
    services = models.CharField()

Просматривая ваши модели, вам нужно заполнить поле services экземпляром Leads:


form_dict = {'project_id': keys.project_id,
                     'agent': keys.agent,
                     'client': keys.point_of_contact,
                     'company': keys.company,
                     'service': keys, # <-- point to Leads
                     'licenses':keys.expected_licenses
                     }
Вернуться на верх