首页 > 解决方案 > 将登录用户设置为 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

提前感谢您的帮助。

标签: pythondjangodjango-forms

解决方案


推荐阅读