如何填写CreateView本身的字段

问题描述 投票:0回答:1

我正在创建一个项目,我有一个疑问,所以该网站是否为支持中心,其中django项目在用户填写一般表单后为用户记录案例。

所以我创建了一个模型名称Case,它有像case_number,email和所有这些的字段。

现在,在views.py中我使用CBV CreateView来创建保存用户表单并创建一个简单的案例编号。

我被困在哪里,需要随机创建一个10位数字符串字段的案例编号,但是如何在客户填写完表格后存储它?

因为在字段中提到的任何不良内容都会显示为客户的输入而case_number不是我希望客户填写的内容,它应该是自动生成的。

我相信它可以简单地完成: -

r2 = [random.randint(0,10),random.randint(0,10),random.randint(0,10),random.randint(0,10),random.randint(0,10),random。 randint(0,10),random.randint(0,10),random.randint(0,10),random.randint(0,10),random.randint(0,10)]

case_number =(''。join(r2中的x的str(x)))

并且在CBV中CreateView将让我随机创建一个数字并保存它但我希望这在后端完成所以我不能在创建视图中提及它,

这只是怀疑,我已经尝试过了。

models.py

class Case:
    case_number = models.CharField(max_length=10)
    issue=models.TextField()
    product=models.CharField(max_field=100)

    def get_absolute_url(self):
        return reverse('case:single')

Views.py

class CaseCreation(CreateView):
    model=Case
    fields=('issue', 'product')
    r2=[random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10)]

    self.case_number = (''.join(str(x) for x in r2))

预期的结果是我想要随机一个10位数的数字来为客户打包并保存在数据库中

DB是sql lite3。

python-3.7 django-2.1
1个回答
0
投票

好的,只是为了让你们知道我终于想出了答案,

我在models.py中定义了创建案例的逻辑,如下所示。

def case_generation(self):
    r2=[random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10)]
    self.case_number = (''.join(str(x) for x in r2))
    self.save()

现在在views.py中我定义了一个函数并调用了models.py中定义的函数并保存。

@login_required
def case_number_generation(request, pk):
    case = get_object_or_404(Case, pk=pk)
    case.case_generation()
    return redirect("cases:single_pk", pk=case.pk)

在这之间我定义了urls.py这样一个用户生成的情况,函数将自己调用。

如果您有兴趣查看完整的代码,请不要担心让我知道如果需要,请在此处发布。 ;)

© www.soinside.com 2019 - 2024. All rights reserved.