Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python django在postgreSQL中保存外键_Django_Postgresql_Python 2.7 - Fatal编程技术网

使用python django在postgreSQL中保存外键

使用python django在postgreSQL中保存外键,django,postgresql,python-2.7,Django,Postgresql,Python 2.7,我试图使用表单将对象中的外键保存到我的db中,但我得到错误:“语法对integer无效”,我发现postgreSQL将外键保存为id,那么我如何保存它 这是我的密码 Models.py: class treballador(models.Model): nom = models.CharField(max_length=150, null=False, unique=True) cognom = models.CharField(max_length=150, null=Fals

我试图使用表单将对象中的外键保存到我的db中,但我得到错误:“语法对integer无效”,我发现postgreSQL将外键保存为id,那么我如何保存它

这是我的密码

Models.py:

class treballador(models.Model):
    nom = models.CharField(max_length=150, null=False, unique=True)
    cognom = models.CharField(max_length=150, null=False)
    tipusDocID = models.CharField(max_length=3, choices=TIPUSDOC, null=False)
    docId = models.CharField(max_length=9, null=False)
    tlf_regex = RegexValidator(regex=r'^\d{9,9}$',message="Phone number must be entered in the format: '+999999999'. Up to 9 digits allowed.")
    tlf = models.CharField(validators=[tlf_regex], blank=True, max_length=9)  # validators should be a list
    correu = models.EmailField(max_length=254)
    ciutat = models.CharField(max_length=150)
    dataDAlta = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return unicode(self.nom) or unicode(self.id)

class despesa(models.Model):
    nomTreballador = models.ForeignKey(treballador, to_field='nom')
    tipusDeGast = models.CharField(max_length=3, choices=GASTOS)
    quantia = models.DecimalField(max_digits=5, decimal_places=2)
    data = models.DateTimeField()
forms.py:

class desModelForm(forms.ModelForm):
    data = forms.DateField(widget=DateInput(format='%d/%m/%Y'), label="Data de la despesa", input_formats=['%d/%m/%Y'])

    class Meta:
        model= despesa
        fields= ["nomTreballador","tipusDeGast","quantia","data"]

        def clean_despesa(self):
            despeses = self.cleaned_data.get("tipusDeGast")
            return despeses

        def clean_date(self):
            date = self.cleaned_data.get("data")
            return date

        def clean_quantia(self):
            quantia = self.cleaned_data.get("quantia")
            return quantia

        def clean_nom(self):
            nomTreballador = self.cleaned_data.get("nomTreballador")
            return nomTreballador

    def __init__(self, *args, **kwargs):
        super(desModelForm, self).__init__(*args, **kwargs)
        self.fields["nomTreballador"].queryset=treballador.objects.all().distinct()
views.py:

def home(request):
    form = desModelForm(request.POST or None)

    context = {
        "gast_form": form
    }


    if form.is_valid():

        desp = form.save(commit=False)

        desp.save()



    return render(request, "imputacioDespeses.html", context)

nomtrelabaldor
ForeignKey字段中删除
to_field='nom'
,它将插入
trebalaldor
的主键(一个整数),而不是
nom
(一个字符串)。

您的外键字段就是问题所在。 删除到_字段,Django将自动将其映射到ID

nomTreballador=models.ForeignKey(TREBALADOR)