gpt4 book ai didi

python - Django 使用 request.user.get_username() 填充隐藏输入

转载 作者:行者123 更新时间:2023-11-30 22:26:40 24 4
gpt4 key购买 nike

我有一个模型:

class Alert(models.Model):
entity = models.ForeignKey(Entity, on_delete=models.CASCADE, db_column='entity')
user = models.CharField(max_length=12)
#...More Fields
def __str__(self):
return '%s' % self.entity

我有一个由 Crispy-forms 渲染的相应模型表单和模型表单集:

class AlertForm(ModelForm):
class Meta:
model = Alert
fields = '__all__'
widgets = {
'user': HiddenInput(),
'entity': ModelSelect2(url='eda', attrs={'data-minimum-input-length': 2}),

AlertFormSet = modelformset_factory(Alert, extra=1, exclude=(), form=AlertForm)

我有一个构建在表单集之上的 View :

def alerts(request):
helper = AlertFormsetHelper()
if request.method == 'POST':
formset = AlertFormSet(request.POST)
for form in formset:
if form.is_valid():
if form.has_changed():
if form.is_valid():
form.save()
entity = form.cleaned_data['entity']
messages.success(request, 'SUCCESS: Alert for %s was dispositioned' % entity)
return redirect('alerts')
else:
query = Alert.objects.filter(disposition='')
paginator = Paginator(query, 12)
page = request.GET.get('page')
try:
objects = paginator.page(page)
except PageNotAnInteger:
objects = paginator.page(1)
except EmptyPage:
objects = paginator.page(paginator.num_pages)
page_query = query.filter(id__in=[object.id for object in objects])
formset = AlertFormSet(queryset=page_query.order_by('entity'))
context = {'objects':objects, 'formset':formset, 'helper':helper}
return render(request, 'alerts/alerts.html', context)

我希望用当前的REMOTE_USER用户名填充user,该用户名可以通过request.user.get_username()访问。 user.get_username 在我的模板中正确执行并显示当前用户。但是,当我尝试自动填充字段并将数据发布到数据库时,记录未发布。我尝试将 View 更改为:

def alerts(request):
helper = AlertFormsetHelper()
if request.method == 'POST':
formset = AlertFormSet(request.POST)
for form in formset:
if form.is_valid():
if form.has_changed():
if form.is_valid():
form.save()
entity = form.cleaned_data['entity']
user = request.user.get_username()
messages.success(request, 'SUCCESS: Alert for %s was dispositioned' % entity)
return redirect('alerts')

我尝试创建正在保存的表单的新实例,应用用户操作,然后保存该实例。这也没有结果。

在将表单集中的表单保存到数据库之前,我应该如何访问当前用户并自动填充空白的隐藏字段?

表单集保存更新:

if request.method == 'POST':
formset = AlertFormSet(request.POST)
if formset.is_valid():
formset.instance.user = request.user.get_username()
formset.save()
entity = formset.cleaned_data['entity']
messages.success(request, 'SUCCESS: Alert for %s was dispositioned' % entity)

第二个表单集保存更新:

if request.method == 'POST':
formset = AlertFormSet(request.POST)
if formset.is_valid():
instances = formset.save(commit=False)
for instance in instances:
instance.user = request.user.get_username()
instance.entity = instance.cleaned_data['entity']
instance.save()
messages.success(request, 'SUCCESS: Alert for %s was dispositioned' % entity)

最佳答案

我认为您不需要在这里隐藏输入。我会使用不包含用户字段的表单。

class AlertForm(ModelForm):
class Meta:
model = Alert
fields = ['entity', ...] . # don't include user
...

然后在您的 View 中,您可以在保存表单之前设置form.instance.user

if form.is_valid():
form.instance.user = request.user.get_username()
form.save()

关于python - Django 使用 request.user.get_username() 填充隐藏输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47167331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com