Каковы шаги, чтобы заставить ModelForm работать с отношением ManyToMany в Django? - PullRequest
0 голосов
/ 12 марта 2020

Как вызвать или реализовать много-много полей в шаблоне? единственное, о чем я могу думать прямо сейчас, - это сделать еще одну форму специально для IncomeSection. Таким образом, форма IncomeSection будет вызываться снова в представлении и передавать ее в шаблон. Есть ли способ, которым я могу поставить ту же форму, что и имя клиента?

"обновления"

Реальная реальная проблема в том, что я хочу, чтобы форма Dynami c таким образом, пользователь может динамически складывать оклады и бонусы (будет реализован позже с помощью javascript). Таким образом, БД будет создавать новую строку в таблице IncomeSection каждый раз, когда пользователь добавляет новую зарплату или бонус. Поэтому я использую отношение manaytomany с таблицей taxcomp, чтобы обслуживать 1 клиента со многими ситуациями с зарплатами и бонусами. Буду рад, если кто-нибудь сможет прокомментировать мою модель и решение БД.

model.py

class Taxcomp(models.Model):
      ClientName = models.CharField(_('Client Name'),max_length=50,blank = True, null= True)
      income = models.ManyToManyField(IncomeSection,blank=True)
class IncomeSection(models.Model):
      Salary= models.CharField(choices=income.choices,max_length=512,null=True,blank=True)
      Bonus= models.CharField(choices=income.choices,max_length=512,null=True,blank=True)
      description = models.CharField(max_length=512,null=True,blank=True)

form.py

class taxCompForm(forms.ModelForm):
      class Meta:
         model = Taxcomp
         fields = ('__all__')

view.py

def taxcompute(request):
msg = 'Tax Comp Successfully Updated'
msgerror = 'Invalid inputs'
data = request.session.get('session_data')
clientname = data['client_name']

if request.method == "GET":
    form = taxCompForm(initial={'ClientName':clientname})
    formc = ProfileUpdateForm()
    income_list = []
    salary = []
    bonus = []


    taxcompobj = Taxcomp.objects.all()
    header_fields = []

    income_obj = Taxcomp.objects.get(pk=1)
    print(income_obj)

    for income in income_obj.income.all():
        incomeForm = taxCompForm(instance=income)

        if income.title == "Salary":
            salary.append(incomeForm)

        elif income.title == "Bonus":
            bonus.append(incomeForm)
        else:
            comission.append(**incomeForm**)

    salary.append(taxCompForm(initial={'title':'Salary'}))
    bonus.append(taxCompForm(initial={'title':'Bonus'}))
    context ={      
        'form' :form,
        'formc': formc,
        'salaryform': salary,
        'bonusform': bonus  
    }
else:
    form = taxCompForm(request.POST)
    if form.is_valid() :
        form.save()

        messages.success(request, f'{msg}')
        return redirect ('taxcompute')
    else:
        messages.error(request, f'{msgerror}')

        print(inputf.errors)
        return redirect ('taxcompute')


return render (request,'taxcomp.html',context)

taxcomp. html

 {%for bonus in bonusform%}
      <div class="row m-2">
        <div class="col-sm">
          <label class="">Bonus</label>
        </div>
        <div class="col-lg-2">
          {{ bonus.conversion_amount}}
        </div>
      </div>
      {%endfor%}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...