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

How to set value of model field as currently logged user? Django

我有一个事件模型,它有一个字段创建者作为 ForeignKey 和属性 User。在 views.py 中,我有 create_event 使用 EventForm 创建事件。如何将 EventForm 中创建者的默认值设置为当前登录的用户?它默认设置为管理员,我不想每次创建活动都手动设置它,因为如果我创建了很多用户,那会很烦人。

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, null=True, 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 = [
            <b><strike>"creator",</strike> # remove this field</b>
            "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():
            <b>event = form.save(commit=False)
            event.creator = request.user
            event.save()</b>
            return redirect('/')

    context = {'form': form}
    return render(request, 'events/create_event.html', context)