使用 django admin 中的选项一次更新两个字段
Updating two fields at once with choices in django admin
我的模型中有 x
和 y
作为 DecimalField
。
像这样:
class MyModel(models.Model):
x = models.DecimalField()
y = models.DecimalField()
我希望用户从我拥有的词典列表中 select 这些 x
和 y
。它必须 select 一起编辑。
举个例子:
[
{
"x": 1,
"y": 2,
},
{
"x": 3,
"y": 4,
},
]
示例列表中有两个词典,因此用户应该在下拉列表中看到两个选项。
- 选择一个 x: 1 和 y: 2
- 选择二 x: 3 和 y: 4
我需要为此自定义一些小部件或字段吗?如果我需要我该怎么做?
最简单的方法是这样,您可以使用将保存在数据库中的值来创建选择,例如 (1,2) 首先表示 x 和第二个表示 y 并使用 split 函数将其拆分,然后转换为十进制类型并使用这些值创建 MyModel 实例。
下面元组中的第二个值是将在 HTML 选项中显示的值
模型和形式
class MyModel(models.Model):
x = models.DecimalField(decimal_places=1, max_digits=3)
y = models.DecimalField(decimal_places=1, max_digits=3)
def __str__(self):
return '{},{}'.format(self.x, self.y)
class StackForm(forms.Form):
MyChoices = (
('1,2', 'x = 1 , y = 2'),
('3,4', 'x = 3 , y = 4'),
)
ChoiceOne = forms.ChoiceField(choices=MyChoices)
查看
def home(request):
value = MyModel.objects.all()
if request.method == 'POST':
form = StackForm(request.POST)
if form.is_valid():
data = form.cleaned_data['ChoiceOne']
new_data = data.split(',')
x = float(new_data[0])
y = float(new_data[1])
MyModel.objects.create(x=x, y=y)
return HttpResponse('Thanks')
else:
form = StackForm()
context = {
'form': form,
'value': value,
}
return render(request, 'stack.html', context)
我的模型中有 x
和 y
作为 DecimalField
。
像这样:
class MyModel(models.Model):
x = models.DecimalField()
y = models.DecimalField()
我希望用户从我拥有的词典列表中 select 这些 x
和 y
。它必须 select 一起编辑。
举个例子:
[
{
"x": 1,
"y": 2,
},
{
"x": 3,
"y": 4,
},
]
示例列表中有两个词典,因此用户应该在下拉列表中看到两个选项。
- 选择一个 x: 1 和 y: 2
- 选择二 x: 3 和 y: 4
我需要为此自定义一些小部件或字段吗?如果我需要我该怎么做?
最简单的方法是这样,您可以使用将保存在数据库中的值来创建选择,例如 (1,2) 首先表示 x 和第二个表示 y 并使用 split 函数将其拆分,然后转换为十进制类型并使用这些值创建 MyModel 实例。
下面元组中的第二个值是将在 HTML 选项中显示的值
模型和形式
class MyModel(models.Model):
x = models.DecimalField(decimal_places=1, max_digits=3)
y = models.DecimalField(decimal_places=1, max_digits=3)
def __str__(self):
return '{},{}'.format(self.x, self.y)
class StackForm(forms.Form):
MyChoices = (
('1,2', 'x = 1 , y = 2'),
('3,4', 'x = 3 , y = 4'),
)
ChoiceOne = forms.ChoiceField(choices=MyChoices)
查看
def home(request):
value = MyModel.objects.all()
if request.method == 'POST':
form = StackForm(request.POST)
if form.is_valid():
data = form.cleaned_data['ChoiceOne']
new_data = data.split(',')
x = float(new_data[0])
y = float(new_data[1])
MyModel.objects.create(x=x, y=y)
return HttpResponse('Thanks')
else:
form = StackForm()
context = {
'form': form,
'value': value,
}
return render(request, 'stack.html', context)