Django以静态形式添加字段

时间:2020-06-11 18:39:50

标签: python django django-forms

美好的一天,

我正在尝试制作一个Django表单,在其中可以静态添加字段(下图描述了该概念)。

我想拥有一个带有“新建”按钮的表单。按钮“新”应该重定向到另一个页面,我可以在其中填充数据,例如从,到和数量。当我按提交后,它应该返回到表格,在表格中填写的数据应该可见(金额1,金额2等)。

有人可以带领我走上正确的道路吗?

P.S。我不能使用javascript

enter image description here

我正在使用的代码:

models.py

fun main() {
    val someDummmyFilledListOfTestClass = listOf<TestClass>(
        TestClass(1.toBigDecimal()),
        TestClass(199.toBigDecimal()),
        TestClass(null),
        TestClass(501.toBigDecimal())
    )
    val result = helperfunc(someDummmyFilledListOfTestClass, TestClass::variable1::get)
                                                                 // trailing lambda
    // or val result = helperfunc(someDummmyFilledListOfTestClass) { it.variable1 }
    println(result)
}
                                         /* lambda last parameter for trailing lambda */
fun helperfunc(testList: List<TestClass>, function: (TestClass) -> BigDecimal?): BigDecimal {
    return testList
        // map TestClass to BigDecimal? and filter nulls
        .mapNotNull(function)
        // fold with initial value, reduce will throw exception if list is empty
        .fold(BigDecimal.ZERO) { acc, element -> acc.add(element) }
}

data class TestClass(
    var variable1: BigDecimal?
//  var variable2: BigDecimal?
)

views.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse
from django.forms import inlineformset_factory


class Post(models.Model):
    title_choices = [
        ('Mr', 'Mister'),
        ('Ms.', 'Miss'),
    ]

    title = models.CharField(max_length=100)
    first_name = models.CharField(max_length=100, default = '')
    last_name = models.CharField(max_length=100, default = '')
    date_posted = models.DateTimeField(default=timezone.now)

    titles = models.CharField(
        max_length = 3,
        choices = title_choices,
        default= 'Mr', 
    )

    

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk})

class Debt(models.Model):
    Money = models.ForeignKey(Post, on_delete=models.CASCADE, null = True)
    CurrentDebt = models.CharField(max_length=100, default = '')
    Period = models.CharField(max_length=100, default = '')

1 个答案:

答案 0 :(得分:1)

为简单起见,我将使用三个矩形,并从左到右从1到3对其编号。

由于您没有代码,因此我将尽力为您提供我认为可以帮助您的方法的大致蓝图。我假设矩形2和矩形3是用户填充数据的表单,提交矩形2会将数据添加到矩形1。

我看到的挑战是: 1.让矩形2记住一旦转到矩形3再回到矩形2,namelast_name提交了哪些原始数据。 2.将数据从矩形2发送回矩形3。

对于挑战1,我将使用a hidden input。您将有两个隐藏的输入,一个用于name,一个用于last_name

对于挑战2,我将使用FormMixin。使用此mixin,您可以使用get_form_kwargs之类的方法(请参阅上一链接)将数据从视图传递到表单。因此,一旦提交了矩形3,就应该将表单数据重定向到您对矩形2的GET请求中。在此,您使用get_form_kwargs并在其__init__方法中用适当的数据填充表单