微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将模型字段的值设置为当前登录的用户?姜戈

如何解决如何将模型字段的值设置为当前登录的用户?姜戈

我有一个事件模型,它有一个字段创建者作为带有属性用户的外键。在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 举报,一经查实,本站将立刻删除。