[英]Django get model field
我正在尝试根据所选用户选择一个 user_id,然后将 user_id 传递给另一个函数,以便在保存表单条目时为所选用户执行一些计算。 但我不确定如何做到这一点。 添加新条目并保存 (add_monthly_entitlement) 并保存表单时,我想将所选的 user_id 传递给另一个方法来执行一些计算。
class month_and_year(models.Model): user = models.ForeignKey(User, default='', on_delete=models.CASCADE) Month = models.CharField(max_length=100, default="", null=True) Year = models.CharField(max_length=100, default='') def __str__(self): return self.user.first_name @login_required() def add_monthly_entitlement(request): if request.POST: entitlement_form = update_entitlement_form(request.POST) my_field = month_and_year._meta.get_field('user_id') if entitlement_form.is_valid(): calculate_monthly_entitlement(my_field) entitlement_form.save() return HttpResponseRedirect('/staff_balances') else: entitlement_form = update_entitlement_form args = {} args.update(csrf(request)) args['form'] = entitlement_form return render(request, 'update_entitlement_form.html', args) def calculate_monthly_entitlement(get_id): get_id = get_id get_leave_balance_id = Leave_Balance.objects.get(user_id=get_id) get_entitlement_id = monthly_entitlement.objects.get(user_id=get_id) get_leave_balance_id.Leave_current_balance = get_leave_balance_id.Leave_current_balance + get_entitlement_id.entitlement get_leave_balance_id.save()
# You can use session variables
# set session value
request.session['user_id'] = value
# get session value
request.session['user_id']
我通过获取选定的字段值并将该值传递给执行计算的函数来修复它。
form.cleaned_data[字段名]
希望这可以帮助将来的人
def update_monthly_entitlement(request): if request.POST: entitlement_form = update_entitlement_form(request.POST) if entitlement_form.is_valid(): my_field = entitlement_form.cleaned_data['user'] calculate_monthly_entitlement(my_field) entitlement_form.save() return HttpResponseRedirect('/staff_balances') else: entitlement_form = update_entitlement_form args = {} args.update(csrf(request)) args['form'] = entitlement_form return render(request, 'update_entitlement_form.html', args)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.