Выставление поля по умолчанию Python Django
Не могу понять, как сделать чтобы поле user_id заполнялось автоматически, User всегда аунтифицирован. Пытался добавлять в поле default = User.username, это ничего не дало
views.py
def addFile(request):
if not request.user.is_authenticated:
return redirect('%s?next=%s' % (settings.LOGIN_REDIRECT_URL, request.path))
if request.method == 'POST':
form = AddFileForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('storage')
else:
print(form.errors)
else:
form = AddFileForm()
return render(request, 'MainStorage/addfile.html', {'form': form})
models.py
class SaveFile(models.Model):
user_id = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField("Наименование", max_length=255)
saveFile = models.FileField("Файл", upload_to='uploads/%Y/%m/%d/')
file_describe = models.CharField("Описание", max_length=255, blank=True, null=True)
time_save = models.DateTimeField("Дата загрузки", auto_now_add=True)
time_update = models.DateTimeField("Дата редактирования", auto_now=True)
forms.py
class AddFileForm(forms.ModelForm):
class Meta:
model = SaveFile
fields = ['title', 'saveFile', 'file_describe']
widgets = {
'title': forms.TextInput(attrs={'class': 'form-input'}),
'file_describe': forms.Textarea(attrs={'cols': 30, 'rows': 2}),
}
Ответы (1 шт):
Автор решения: TheDesireToBelieve
→ Ссылка
Помогло следующие:
views.py
def addFile(request):
if not request.user.is_authenticated:
return redirect('%s?next=%s' % (settings.LOGIN_REDIRECT_URL, request.path))
if request.method == 'POST':
form = AddFileForm(request.POST, request.FILES)
if form.is_valid():
new_file = form.save(commit=False)
new_file.user_id = request.user
new_file.save()
return redirect('storage')
else:
print(form.errors)
else:
form = AddFileForm()
admin.py (Важно!)
class NewFileAdmin(admin.ModelAdmin):
exclude = ('user_id',)
def save_model(self, request, obj, form, change):
if not obj.pk:
obj.user_id = request.user
super().save_model(request, obj, form, change)
forms.py
class AddFileForm(forms.ModelForm):
class Meta:
model = SaveFile
fields = ['title', 'saveFile', 'file_describe']
exclude = ['user_id']
widgets = {
'title': forms.TextInput(attrs={'class': 'form-input'}),
'file_describe': forms.Textarea(attrs={'cols': 30, 'rows': 2}),
}