首页 > 解决方案 > 如何在没有表单的情况下直接在 django 中将项目添加到数据库

问题描述

我知道,这个问题已经讨论过了,但我无法抓住它。

这是我有的两个模型

# Create your models here.
GENDER_CHOICES = [
    ('Male', 'M'),
    ('Female', 'F')]
class upload(models.Model):
    name = models.CharField(max_length=100,null=True)
    gender = models.CharField(max_length=10,null=True, choices=GENDER_CHOICES)
    phone = models.CharField(max_length=50,null=True)
    email=  models.EmailField(max_length=50,null=True)
    file=models.FileField(upload_to='uploads/',null=True)

    def __str__(self):
        return self.name

class text(models.Model):
    texts=models.CharField(max_length=200,null=True,blank=True)
    upload_text=models.ForeignKey(upload, blank=True, null=True, on_delete = models.CASCADE) 

我有一个模型表格upload。我插入了数据和音频文件。然后我希望这个音频文件转换为文本并将文本保存在数据库中。为此,我创建了另一个模型text

但我不知道如何在模型中输入与模型中输入的信息相关的文本upload

这是我的views.py文件功能

def display(request):
    print('display functio')
    d=upload.objects.last()
    test=sr.takeCommand(d.file.path)
    print(test) **# I can see text here**
    p = text.objects.create(texts=test)
    p.save(force_insert=True)
    print(test)
    return render(request,'thanks.html',{'print':test})

但我无法进入。它抛出一个错误 UNIQUE constraint failed: sub_app_text.id

标签: pythondjangodatabase

解决方案


这是因为您插入了两次。方法[ .create(…)Django-doc]已经插入到数据库中。因此,您可以将其实现为:

def display(request):
    print('display functio')
    d=upload.objects.last()
    test=sr.takeCommand(d.file.path)
    # will store the record in the database
    p = text.objects.create(texts=test)
    print(test)
    return render(request,'thanks.html',{'print':test})

您可以将其链接到d

def display(request):
    print('display functio')
    d=upload.objects.last()
    test=sr.takeCommand(d.file.path)
    # will store the record in the database
    p = text.objects.create(texts=test, upload_text=d)
    print(test)
    return render(request,'thanks.html',{'print':test})

注意:Django 中的模型是用 PerlCase 编写的而不是 snake_case,因此您可能希望将模型从 重命名textText


推荐阅读