Python 在Django中添加许多

Python 在Django中添加许多,python,django,Python,Django,我有一个Web服务,我想将rdp配置文件添加到某个合同号 views.py from django.shortcuts import render from program.models import contract,rdp from django.contrib.auth.decorators import login_required @login_required(login_url='login') def add_rdp(request): if request.m

我有一个Web服务,我想将rdp配置文件添加到某个合同号

views.py

from django.shortcuts import render
from program.models import contract,rdp
from django.contrib.auth.decorators import login_required

@login_required(login_url='login')
def add_rdp(request):
        if request.method == "POST":

                get_rdp = (request.POST.get('rdp', ''))
                get_number = (request.POST.get('contract_number',''))

                new_rdp = rdp(config = get_rdp).save()

                for new_contract in contract.objects.filter(number = get_number):
                        new_rdp.contract.add(new_contract)

        return render(request, 'add_rdp.html')
models.py

class contract(models.Model):
        server = models.ForeignKey(server)
        number = models.CharField(unique = True, max_length = 64)

class rdp(models.Model):
        contract = models.ForeignKey(contract)
        config = models.TextField()
这就是我得到的错误:

Integrity Error
(1048, "Column 'contract_id' cannot be null")

由于这种方法在Django的另一个Web应用程序中对我有效,我不明白为什么不起作用。

因为在没有附加合同的情况下,您调用了
save()

您可以更改模型的定义:

class rdp(models.Model):
        contract = models.ForeignKey(contract, blank = True)
        config = models.TextField()

您必须获取模型实例,然后将其添加到“new_rdp”中。你可以这样做:

@login_required(login_url='login')
def add_rdp(request):
        if request.method == "POST":

                get_rdp = (request.POST.get('rdp', ''))
                get_number = (request.POST.get('contract_number',''))

                for new_contract in contract.objects.all():
                        if new_contract.number == get_number:
                                new_rdp = rdp(config = get_rdp, contract = new_contract).save()

        return render(request, 'add_rdp.html')

我认为问题在于,当您创建新的rdp实例时,您没有为其分配约定值,因为它不可为null。rdp具有约定的外键,而不是多对多关系。你不能
.add()
这样做。它不仅是blank=True,还应该是null=True。你的方法与模型中的更改相结合是否也是合法的做法,或者这只是一种解决方法?