使用python django在postgreSQL中保存外键
我试图使用表单将对象中的外键保存到我的db中,但我得到错误:“语法对integer无效”,我发现postgreSQL将外键保存为id,那么我如何保存它 这是我的密码 Models.py:使用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
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)