有没有一种方法可以自动从模型中填写ForeignKey?

时间:2020-05-20 19:22:56

标签: django django-models django-forms django-views

我对编程很陌生,但是遇到了一个问题,在任何地方都找不到答案;可能是因为我不知道如何很好地描述问题。

我已经建立了一些模型:用户,客户和合同。代码:

models.py:

class CustomerInfo(models.Model):
    user = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
    customer_name = models.CharField(max_length=30, blank=False, null=False)

    def __str__(self):
        return self.customer_name

class ContractInfo(models.Model):
    user = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
    customer = models.ForeignKey(CustomerInfo, null=True, on_delete=models.SET_NULL)
    contract_nr = models.CharField(max_length=20, blank=False, null=False)
    contract_active = models.BooleanField(default=True)
    contract_start = models.DateField(blank=False, null=False)
    contract_end = models.DateField(blank=False, null=False)

    def __str__(self):
        return self.contract_nr

views.py:

def addcontract(request):
    addcontract = AddContractForm()
    if request.method == "POST":
        form = AddContractForm(request.POST)
        if form.is_valid():
            contr = form.save(commit=False)
            contr.user = request.user
            contr.save()
            return HttpResponseRedirect(reverse('Manager:contracts'))
        else:
            form = AddContractForm()
    else:
        form = AddContractForm()
    return render(request,'manager/addcontract.html',{'addcontract':addcontract})

forms.py:


class AddContractForm(forms.ModelForm):
    class Meta():
        model = ContractInfo
        exclude = ('user', 'customer',)
        fields = ('contract_nr', 'contract_active', 'contract_start', 'contract_end',)

现在,我将其设置为人们可以注册和登录。注册时,他们创建了一个公司(客户),在该公司工作。登录后,他们可以添加合同。他们只查看自己签订的合同,通过执行 contr.user = request.user 过滤用户ID的合同。但是,如果他们添加了合同,则合同将链接到用户,而不是(也)链接到他们所属的公司。 有没有一种方法可以自动填写他们注册时使用的客户名称/号码? Image of missing customername

我希望我的问题清楚,我将编辑问题(和标题)以使您的建议更加清楚。

0 个答案:

没有答案