Django admin :: 我想在添加另一项时保留上次选择的值
Django admin :: I want to keep last selected value on adding another item问题的出现原因是希望在添加新项目时保留上次选择的值。为了解决这个问题,可以按照以下步骤进行操作:
1. 在模型中创建author(外键auth.User)和created(自动添加当前时间)字段。
2. 在模型管理类中重写get_form函数,在其中获取当前用户创建的最后一个对象,并将所需的初始值放入外键字段。
以下是示例代码(未经测试,仅供参考):
# 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.site.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
以上是解决问题的方法,通过在get_form函数中获取当前用户创建的最后一个对象,并将其值作为初始值放入外键字段中,从而实现保留上次选择的值的功能。
在Django admin中,当用户添加另一项时,希望保留最后选择的值。下面是一个解决该问题的代码示例:
# 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}
这段代码的作用是在添加另一项时,通过过滤当前用户的ModelTwo对象并按创建时间降序排序,获取最新的对象。然后,将最新对象的model_one_id作为初始数据返回,以保留上次选择的值。
这段代码需要在app的admin.py文件中添加。通过在admin.py文件中重写get_changeform_initial_data方法,并将其返回的初始数据传递给model_one字段,就可以实现保留上次选择的值的功能。