首页 > 解决方案 > 如何添加字段以安全隐藏

问题描述

我有一个表单,它在提交时会保存一些数据,其中一个字段是用户 ID 的外键。我想传递这个 request.user.id 值而不显示在 HTML 代码中(出于安全原因,我不希望人们从检查中更改它)。

这是 HTML:

<form method="POST" action="">
{% csrf_token %}
<div class="container-fluid my-3">
    <div class="row justify-content-center">
        {% for field in form %}
        <div class="{% if forloop.counter0 == 0 %} col-2 {% else %} col-1 {% endif %}">
            {{ field }}
        </div>
        {% endfor %}
        <div class="col-1">
            <input class="btn btn-primary" type="submit" display="inline" id='test'>
        </div>
    </div>
</div>

这是模型:

class SaleEntry(models.Model):
date = models.DateField()
ebay_price = models.FloatField()
amazon_price = models.FloatField()
ebay_tax = models.FloatField()
paypal_tax = models.FloatField()
tm_fee = models.FloatField(default=0.3)
promoted = models.FloatField(default=0.0)
profit = models.FloatField()
user = models.ForeignKey(User, on_delete=models.CASCADE)

这是表格:

class SaleEntryForm(ModelForm):
class Meta:
    model = SaleEntry
    fields = [
        'date',
        'ebay_price',
        'amazon_price',
        'ebay_tax',
        'paypal_tax',
        'tm_fee',
        'promoted',
        'profit'
    ]
    widgets = {
        'date': DateInput(attrs={'class': 'form-control'}),
        'ebay_price': forms.NumberInput(attrs={'class': 'form-control', 'placeholder': 'eBay Price', 'id':'f_ebay_price', 'onchange': 'calc_profit()'}),
        'amazon_price': forms.NumberInput(attrs={'class': 'form-control', 'placeholder': 'Amazon Price', 'id':'f_amazon_price', 'onchange': 'calc_profit()'}),
        'ebay_tax': forms.NumberInput(attrs={'class': 'form-control col-1', 'placeholder': 'eBay Tax', 'id':'f_ebay_tax', 'onchange': 'calc_profit()'}),
        'paypal_tax': forms.NumberInput(attrs={'class': 'form-control col-1', 'placeholder': 'Paypal Tax', 'id':'f_paypal_tax', 'onchange': 'calc_profit()'}),
        'tm_fee': forms.NumberInput(attrs={'class': 'form-control col-1', 'placeholder': 'TM Fee', 'id':'f_tm_fee', 'onchange': 'calc_profit()'}),
        'promoted': forms.NumberInput(attrs={'class': 'form-control col-1', 'placeholder': 'Promoted', 'id':'f_promoted', 'onchange': 'calc_profit()'}),
        'profit': forms.NumberInput(attrs={'class': 'form-control', 'placeholder': 'Profit', 'readonly':'true', 'id':'f_profit'}),
    }

我无法保存这样的表单,因为我需要传递 user_id。

标签: djangoforms

解决方案


您可以通过使用直接从视图中获取当前用户request.user

这可以在您的表单中使用直接传递到您的 forms.py'__init__'中。

您可以在此处找到更多信息: 如何在 django 的表单中将用户名传递给函数?


推荐阅读