2

Context

  1. in django administration site
  2. I am adding a new item in a model via add button
  3. when the form is displayed, I have a dropDown with some options to choose, I choose option B and I fill other fields to complete the form
  4. I click on button save and add another

When the new "add form view" is displayed I want my dropdown to set on the last choice (B option) I selected before

What is your suggestion to implement that as simple is possible?

Thank you

Éric F
  • 63
  • 7

2 Answers2

1

I can offer the following solution:

  1. Create author (fk auth.User) and created (datetime auto_now_add=True) fields in your model.
  2. Override get_form function in model admin class, get the last object created by the current user in it and put the required initial value in the foreign key field

Code examples (not tested, it's just an idea):

# yourapp/models.py
from django.db import models

class ModelOne(models.Model):
    pass

class ModelTwo(models.Model):
    model_one = models.ForeignKey(ModelOne)
    created = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey('auth.User')

# yourapp/admin.py
from django.contrib import admin

from yourapp.models import ModelTwo

@admin.register(ModelTwo)
class ModelTwoAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        form = super(ModelTwoAdmin, self).get_form(request, obj, **kwargs)
        if '_addanother' in request.POST:
            latest_object = ModelTwo.objects.filter(author=request.user).latest('created')

            form.base_fields['model_one'].initial = latest_object.model_one
        return form
devxplorer
  • 678
  • 1
  • 4
  • 10
0

Thanks a lot devxplorer,
after tried your code and did some tests, I got this solution works for me :

#app/admin.py
def get_changeform_initial_data(self,request):
    latest_object = ModelTwo.objects.filter(author=request.user).latest('created')
    return {'model_one': latest_object.model_one_id}
Éric F
  • 63
  • 7