如何解决如何将模型字段的值设置为当前登录的用户?姜戈
我有一个事件模型,它有一个字段创建者作为带有属性用户的外键。在views.py 中,我有create_event,它使用EventForm
创建事件。如何将 EventForm
中创建者的默认值设置为当前登录的用户?默认设置为admin,我不想每次创建事件时都手动设置,因为如果创建了很多用户会很烦。
models.py:
class Event(models.Model):
SPORT = (
('Football','Football'),('Volleyball','Volleyball'),('Basketball','Basketball'),('Futsal','Futsal'),('Tennis','Tennis'),('Handball','Handball'),('Ice Hockey','Ice Hockey'),('Paintball','Paintball')
)
creator = models.ForeignKey(User,null=True,on_delete=models.SET_NULL)
sport = models.CharField(max_length=20,choices=SPORT)
event_name = models.CharField(max_length=30)
event_date = models.DateTimeField(default=date.today())
end_event_date = models.DateTimeField(default=date.today())
current_members = models.IntegerField(default=1)
total_members = models.IntegerField(default=0)
event_location = models.CharField(max_length=50)
cost = models.FloatField(default=0,max_length=5)
description = models.CharField(max_length=300,blank=True)
def __str__(self):
return self.event_name
views.py:
@login_required(login_url='login')
def create_event(request):
form = EventForm()
if request.method == 'POST':
form = EventForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
context = {'form': form}
return render(request,'events/create_event.html',context)
forms.py:
class EventForm(ModelForm):
class Meta:
model = Event
fields = ['creator','sport','event_name','event_date','end_event_date','total_members','current_members','event_location','cost','description']
解决方法
首先,从模型表单中删除 creator
字段
class EventForm(ModelForm):
class Meta:
model = Event
fields = [
"creator", # remove this field
"sport","event_name","event_date","end_event_date","total_members","current_members","event_location","cost","description",]
然后使用Form.save(...)
的commit
参数作为
@login_required(login_url='login')
def create_event(request):
form = EventForm()
if request.method == 'POST':
form = EventForm(request.POST)
if form.is_valid():
event = form.save(commit=False)
event.creator = request.user
event.save()
return redirect('/')
context = {'form': form}
return render(request,'events/create_event.html',context)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。