3

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!

Baqir Khan
  • 694
  • 10
  • 25

2 Answers2

5

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)
Neeraj Kumar
  • 3,851
  • 2
  • 19
  • 41
  • Old post, I know, but this actually works? I tried it and I'm creating new entry instead of editing existing one. Is it desired? How to edit an existing obj? – JChao Jul 06 '18 at 18:53
1

you have to pass the class AnnoucementAdmin, like this:

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