在django中提交表单后自动填充数据库列

时间:2018-01-03 21:54:15

标签: ajax django database django-models django-forms

使用Django 2.0我有一个名为Book的模型类,要求titleauthoryear,但我在该行中有另一列需要唯一的列id基于作者姓名,书名和随机数。这是我的模特

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=50)
    year = models.PositiveSmallIntegerField()
    identification = models.CharField(max_length=50, blank=True)
    holder = models.ForeignKey('Person', related_name='book_holder', on_delete=models.PROTECT(), null=True, blank=True)
    available = models.BooleanField(default=True, blank=True)
    overdue = models.BooleanField(default=False, blank=True)

它将以仅询问titleauthoryear的形式使用,但我正在寻找的是如何填写identification用户提交表单后的列。例如,如果用户输入Harry Potter的{​​{1}}和title的{​​{1}},我希望J. K. Rowling具有两者的组合值加上最后是一个八位数的随机数,如author,但我也需要这一列对每本书都是唯一的,所以如果我必须使用相同的哈利波特书籍,我需要两者都不同,所以一个人可能是identification,而另一个可能是JH28194637。我将使用ajax提交表单,我想在用户填写JH28194637JH39287104字段然后传递时,我的javascript中可能有一个变量来构建我的identification这是我的ajax电话。那会是最好的方式吗?但是,我如何能够检查数据库中是否已存在变量值,或者执行此任务的最佳方式是什么。

1 个答案:

答案 0 :(得分:1)

由于其他两个字段可能会发生变化,我认为您的标识字段也需要更改,就唯一整数而言,您始终可以使用该图书模型ID来简化操作(除非您需要指定某些书籍的特定内容。)

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=50)
    year = models.PositiveSmallIntegerField()
    holder = models.ForeignKey('Person', related_name='book_holder', on_delete=models.PROTECT(), null=True, blank=True)
    available = models.BooleanField(default=True, blank=True)
    overdue = models.BooleanField(default=False, blank=True)
    @property
    def identification():
        a = self.author[:1].upper()
        t = self.title[:1].upper()
        id = str(self.id.zfill(10))
        return a+t+id