form.py 中分配实例的外键字段问题

ForeignKey field problem with assign instance in form.py

这里我想保存我页面上 form.py 的数据(在管理面板上一切正常)。

我的 model.py 是,

class contrat(models.Model):
    contrtID     = models.CharField(max_length=25,unique=True)
    def __str__(self):
        return self.contrtID

和另一个 table;

class Invoices(models.Model):
    Invoce_Titl    = models.CharField(max_length=50)
    Cntrat_Nbr     = models.ForeignKey(contrat, on_delete=models.CASCADE) #should be Actived
    def __str__(self):
        return self.Invoce_Titl

我使用的表格是:

query_contrat = (('', '-------'),)
class Invoices_F(forms.ModelForm):
    Invoce_Titl     = forms.CharField(label='Invoice Title',max_length=50)
    Cntrat_Nbr      = forms.ChoiceField(label='Contract ID',choices=query_contrat)
    class Meta:
        model= Invoices
        fields=('Invoce_Titl','Cntrat_Nbr')
    def __init__(self, *args, **kwargs):
        super(Invoices_F, self).__init__(*args, **kwargs)
        self.fields['Cntrat_Nbr'].choices = query_contrat + tuple( contrat.objects.filter(Actived='Active').values_list('id','contrtID'))

因此,当我在 HTML 页面中尝试时,当我按保存数据时出现此错误。

无法分配“'5'”:“Invoices.Cntrat_Nbr”必须是“合同”实例。

所以我的 from 将 contrat.id 作为带有另一个 ' ' 的字符串,那么我该如何解决这个问题?

Django 有一个表单字段:a ModelChoiceField [Django-doc]:

class Invoices_F(forms.ModelForm):
    Invoce_Titl = forms.CharField(label='Invoice Title',max_length=50)
    Cntrat_Nbr = forms.<strong>ModelChoiceField(</strong>
        <strong>required=False</strong>,
        label='Contract ID',
        queryset=contrat.objects.filter(Actived='Active')
    <strong>)</strong>
    
    class Meta:
        model= Invoices
        fields=('Invoce_Titl','Cntrat_Nbr')

这将使 contrat 模型对象的选择更加优雅并且样板代码更少。