Django Admin:将初始数据提供给表单字段
Django Admin: Give initial data to form field
我需要通过管理面板手动向数据库添加一个条目,但管理员应该无法设置所有值:
#models.py
class Product(models.Model):
price = models.DecimalField("price")
status = models.PositiveIntegerField("status")
name = models.CharField("name", max_length=31, unique=True)
## tried:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.initial['status'] = 2
#admin.py
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = ["price", "name",]
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
form = ProductForm
## tried:
def get_changeform_initial_data(self, request):
return {'status': 99}
管理员应该能够创建一个 Product
并给它一个 name
和 price
,但是 status
值应该设置为 0
.我已经尝试 approach and this,但没有成功。
我试过了:
- 使用
__init__
方法添加初始值
get_changeform_initial_data()
添加状态的方法。
我总是以 sqlite3.IntegrityError: NOT NULL constraint failed: _TEST_Product.status
结尾。
edit:我知道这可以通过在模型中设置默认值来完成,但这不是我想要的 - 我想在管理员中设置它.
编辑
由于您不想使用 default
字段,您应该从 this answer 开始尝试这种方法。
class ProductAdmin(admin.ModelAdmin):
form = ProductForm
def save_model(self, request, obj, form, change):
obj.status = 0
super().save_model(request, obj, form, change)
为什么不直接使用 default
字段?
status = models.PositiveIntegerField("status", default=0)
我需要通过管理面板手动向数据库添加一个条目,但管理员应该无法设置所有值:
#models.py
class Product(models.Model):
price = models.DecimalField("price")
status = models.PositiveIntegerField("status")
name = models.CharField("name", max_length=31, unique=True)
## tried:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.initial['status'] = 2
#admin.py
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = ["price", "name",]
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
form = ProductForm
## tried:
def get_changeform_initial_data(self, request):
return {'status': 99}
管理员应该能够创建一个 Product
并给它一个 name
和 price
,但是 status
值应该设置为 0
.我已经尝试
我试过了:
- 使用
__init__
方法添加初始值 get_changeform_initial_data()
添加状态的方法。
我总是以 sqlite3.IntegrityError: NOT NULL constraint failed: _TEST_Product.status
结尾。
edit:我知道这可以通过在模型中设置默认值来完成,但这不是我想要的 - 我想在管理员中设置它.
编辑
由于您不想使用 default
字段,您应该从 this answer 开始尝试这种方法。
class ProductAdmin(admin.ModelAdmin):
form = ProductForm
def save_model(self, request, obj, form, change):
obj.status = 0
super().save_model(request, obj, form, change)
为什么不直接使用 default
字段?
status = models.PositiveIntegerField("status", default=0)