使用 django admin 中的选项一次更新两个字段

Updating two fields at once with choices in django admin

我的模型中有 xy 作为 DecimalField

像这样:

class MyModel(models.Model):
  x = models.DecimalField()
  y = models.DecimalField()

我希望用户从我拥有的词典列表中 select 这些 xy。它必须 select 一起编辑。

举个例子:

[
  {
    "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)