首页 > 解决方案 > 有没有办法从模型中自动填写 ForeignKey?

问题描述

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

我制作了一些模型:用户、客户和合同。代码:

模型.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

视图.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})

表格.py:


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

现在我已经设置了人们可以注册和登录。当他们注册时,他们创建了一个为(客户)工作的公司。登录后,他们可以添加合同。他们只看到他们制定的合同,通过执行以下操作过滤用户 ID 的合同:contr.user = request.user。但是,如果他们添加合同,则合同与用户相关联,而不是(还)他们所属的公司。有没有办法自动填写他们注册的客户姓名/号码? 缺少客户名称的图像

我希望我的问题很清楚,我将编辑问题(和标题),以便根据您的建议更清楚。

标签: djangodjango-modelsdjango-formsdjango-views

解决方案


推荐阅读