Reputation: 1009
I'm using Django's built in user who is in my application authenticates and uses some service. Now my problem is, I want to get current user's username and write it to database. Here I've used such method that mentioned User model as a ForeignKey, but it is assigning to database as an empty data. But I want to write current user's name. Here are my codes:
views.py
:
@login_required(login_url='sign_in')
def upload_document(request):
context = {}
form = UploadDocumentForm()
if request.method == 'POST':
form = UploadDocumentForm(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
return redirect('index')
context = {'form':form}
return render(request, 'upload_document.html', context)
models.py
:
class OriginalDocument(models.Model):
document = models.FileField(upload_to='static/original_document', blank=False)
document_title = models.CharField(max_length=300)
student_name = models.CharField(max_length=100)
teacher_name = models.CharField(max_length=100)
document_type = models.CharField(max_length=100)
university = models.ForeignKey(University, on_delete=models.CASCADE)
date_added = models.DateTimeField(auto_now_add = True)
checked_by = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.document_title
forms.py:
class UploadDocumentForm(ModelForm):
class Meta:
model = OriginalDocument
fields = '__all__'
exclude = ['date_added', 'checked_by']
def __init__(self, *args, **kwargs):
super(UploadDocumentForm, self).__init__(*args, **kwargs)
Upvotes: 0
Views: 61
Reputation: 1394
Then you have to write save_model
into your admin.py
as below...
class OriginalDocumentAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if not change:
obj.checked_by = request.user
obj.save()
admin.site.register(OriginalDocument, OriginalDocumentAdmin)
Or Try it with override save() method of form as below...
class UploadDocumentForm(ModelForm):
class Meta:
model = OriginalDocument
fields = '__all__'
exclude = ['date_added', 'checked_by']
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(UploadDocumentForm, self).__init__(*args, **kwargs)
def save(self, *args, **kwargs):
obj = super(UploadDocumentForm, self).save(*args, **kwargs)
if self.request:
obj.checked_by = self.request.user
obj.save()
return obj
Upvotes: 0
Reputation: 1009
Finally, after an hours of searching I've found a package named django-currentuser (link is here) which is pretty simple to use and a project that I really wanted. This package helped me to get username of logged in user and use it as a field in model.
Upvotes: 1