I.Jokhadze
I.Jokhadze

Reputation: 477

Get latest saved object values in Django admin panel

Many toys have same information(for example description and price) how can i customise my admin.py in order to get last saved object values, everytime when i press add new toy in admin panel and display them in my input fields.

models.py

class Toy(models.Model):
name = models.CharField(max_length=255)
description = TextField()
quantity = models.FloatField(default=0.0)
price = models.FloatField()

def __unicode__(self):
    return self.name

admin.py

admin.site.register(Toy)

Upvotes: 0

Views: 937

Answers (2)

Messaoud Zahi
Messaoud Zahi

Reputation: 1232

Try to do it like that:

First create a form in your admin.py:

class ToyForm(forms.ModelForm):
    class Meta:
        model = Toy
        fields = ('__all__')

    def __init__(self, *args, **kwargs):
        #if not an edit
        if 'instance' not in kwargs:
            #we get the last object
            last_object = Toy.objects.all().order_by("id")[0]
            #we add the last object informations to the initial data
            initial = {'description': last_object.description, 'price': last_object.price}
            kwargs['initial'] = initial
        super(ToyForm, self).__init__(*args, **kwargs)

Then add this form to the Admin model:

class ToyAdmin(admin.ModelAdmin):
    form = ToyForm

Fianally:

admin.site.register(ToyAdmin, Toy)

Upvotes: 2

Renjith Thankachan
Renjith Thankachan

Reputation: 4346

In modeladmin class there is a method get_form, you can override the method to return, the values returned from you conditioned queryset results ( Mymodel.objects.last() )

from django.contrib import admin
@admin.register(Toy)
class ToyAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        form = super(ToyAdmin, self).get_form(request, obj, **kwargs)
        # code logic to check condition & queryset like Toy.objects.last()
        form.base_fields['name'].initial = 'value'
        return form

Upvotes: 0

Related Questions