Baqir Khan
Baqir Khan

Reputation: 804

Cannot override save_model django admin?

I do not understand what I am doing wrong. I want a user to only add the title and description of the Annoucement Model and the rest should be filled automatically. Here is my model:

class Annoucement(models.Model):
    username = models.ForeignKey(User, on_delete=None)
    title = models.CharField(max_length=500, default="")
    description = models.TextField(max_length=5000, default="")
    datetime = models.DateTimeField(default=datetime.now)

    def __str__(self):
        return self.title + " " + self.username.username

And this is admin.py file.

from django.contrib import admin

from .models import Profile, Activity, View, Annoucement
# Register your models here.


class AnnoucementAdmin(admin.ModelAdmin):
    fields = ['title', 'description']


    def save_model(self, request, obj, form, change):
        obj.username = request.user
        print("yes")
        super(AnnoucementAdmin, self).save_model(request, obj, form, change)

admin.site.register(Profile)
admin.site.register(Activity)
admin.site.register(View)
admin.site.register(Annoucement)

Also, the print("yes") is also not coming on the terminal once I save the model from the admin panel. HELP!

Upvotes: 3

Views: 7550

Answers (2)

Neeraj Kumar
Neeraj Kumar

Reputation: 3951

1) admin.site.register(Annoucement, AnnoucementAdmin)

2) add 'return' in the last of save_model

class AnnoucementAdmin(admin.ModelAdmin):
    fields = ['title', 'description']

    def save_model(self, request, obj, form, change):
        obj.username = request.user
        print("yes")
        return super(AnnoucementAdmin, self).save_model(request, obj, form, change)

Upvotes: 5

Vinicius Campanate
Vinicius Campanate

Reputation: 98

you have to pass the class AnnoucementAdmin, like this:

....
admin.site.register(Annoucement, AnnoucementAdmin)

Upvotes: 1

Related Questions