I have Event model which has a field creator as ForeignKey with attribute User. In views.py, I have create_event which creates event using EventForm
. How to set default value of creator in EventForm
as currently logged user? It is set default as admin, I do not want to set it manually every time I create an event, because it would be annoying if I have a lot of users created.
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']
First, remove the creator
field from the model form
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",
]
Then use commit
parameter of Form.save(...)
as
@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)