python - 将登录用户设置为 Django 模型表单中的字段
问题描述
我的 Django 站点中有一个模型表单,我希望它自动将登录的用户设置为“创建者”(其中一个字段),而不允许他们更改它。该字段不需要为用户显示在表单中,但需要添加到数据库中。
我该怎么办?
这是相关的 forms.py 表单:
class EventForm(ModelForm):
class Meta:
model = Event
fields = ('name','category','descr','start','end', 'location', 'attending', 'creator')
labels = {
'name': '',
'category': '',
'descr': '',
'start': 'Start Date and Time',
'end': 'End Date and Time',
'location': 'Location',
'attending': 'Attending',
'creator': 'Creator',
}
widgets = { 'name': forms.TextInput(attrs={'class':'form-control', 'placeholder':'Name of Event'}),
'category': forms.TextInput(attrs={'class':'form-control', 'placeholder':'Event Category'}),
'descr': forms.Textarea(attrs={'class':'form-control', 'placeholder':'Description'}),
'start': forms.TextInput(attrs={'class':'form-control', 'placeholder':'YYYY-MM-DD HH:MM:SS'}),
'end': forms.TextInput(attrs={'class':'form-control', 'placeholder':'YYYY-MM-DD HH:MM:SS'}),
'location': forms.Select(attrs={'class':'form-select', }),
'attending': forms.SelectMultiple(attrs={'class':'form-control', }),
'creator': forms.Select(attrs={'class':'form-select', }),
}
这是模型(用户外键来自 django.contrib.auth.models):
class Event(models.Model):
name = models.CharField('Event Name', max_length=300)
category = models.CharField('Event Type',max_length=100, null=True, blank=True)
descr = models.TextField(blank = True, null = True)
start = models.DateTimeField('Start Time')
end = models.DateTimeField('End Time', null= True, blank = True)
location = models.ForeignKey(Location, blank = True, null = True, on_delete = models.CASCADE)
attending = models.ManyToManyField(People, blank=True)
creator = models.ForeignKey(User, null = True, blank = True, on_delete = models.SET_NULL, related_name = 'event')
def __str__(self):
return self.name
和观点:
def add_event(response):
sent = False
if response.method == 'POST':
form = EventForm(response.POST)
if form.is_valid():
cd_instance = Countdown(name=form.cleaned_data['name'], time=form.cleaned_data['start'])
cd_instance.save()
form.save()
return HttpResponseRedirect('/add-event?sent=True')
else:
form = EventForm()
if 'sent' in response.GET:
sent = True
return render(response, 'main_app/add_event.html', {'form':form, 'sent': sent})
视图只加载了 form = EventForm() 的表单,模板显示 form.as_p
提前感谢您的帮助。
解决方案
推荐阅读
- javascript - 如何在Javascript中找到数组中的特定项目?
- regex - 将 perl 正则表达式捕获组存储在 bash 变量中
- c# - C# Console.ReadLine() 从不读取 Linux 中 VSC 上的输入
- c++ - 使用 MPI 的 FEM 组装
- php - IOS 推送通知问题与 APNS
- php - Firebase 推送通知 - 未接收
- java - 如何在春季显示数据库中的图片?
- r - 闪亮的 Azure WebApp 以用户身份向 Azure SQL Server 进行身份验证
- javascript - P5.js 游戏因数组中缺少元素的 TypeError 而崩溃
- java - 当这些方法的返回类型取决于子类时,如何强制执行子类行为/方法?