gpt4 book ai didi

Django 管理表单和带默认值的内联模型

转载 作者:行者123 更新时间:2023-12-02 21:11:19 36 4
gpt4 key购买 nike

我正在将 django 应用程序从 1.4 更新到 1.8,并且在 django admin 上遇到了一个小问题。

我的模型看起来像这样

def new_key():
return binascii.b2a_hex(os.urandom(20))

class ApiKey(models.Model):
customer = models.ForeignKey(UserProfile)
key = models.CharField(max_length=40, default=new_key)

admin.py 是

class ApiKeyInline(admin.StackedInline):
model = ApiKey
extra = 0

class UserProfileAdmin(admin.ModelAdmin):
inlines = [ApiKeyInline]

admin.site.register(UserProfile, UserProfileAdmin)

使用管理页面 api key 时,会使用随机值正确填充。但是,当保存 UserProfile 时,它​​不会被保存,就好像没有添加任何内容一样。如果我手动更改自动生成的 key 中的单个字母,保存工作正常。在我看来,这是 django 检测更改或类似问题的问题。

有什么建议吗?代码在 1.4 中有效。

最佳答案

旧线程之一中有一个解决方案:How to force-save an "empty"/unchanged django admin inline?

您应该将内联表单标记为始终已更改。

from django.forms import ModelForm
from .models import UserProfile

class AlwaysChangedModelForm(ModelForm):
def has_changed(self):
""" Should returns True if data differs from initial.
By always returning true even unchanged inlines will get validated and saved."""
return True

#An inline model
class ApiKey(admin.StackedInline):
model = ApiKey
extra = 0
form = AlwaysChangedModelForm

关于Django 管理表单和带默认值的内联模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33242836/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com