【问题标题】:Save a foreign key in postgreSQL using python-django使用 python-django 在 postgreSQL 中保存外键
【发布时间】:2017-06-18 02:56:45
【问题描述】:

我正在尝试使用表单将对象内的外键保存到我的数据库中,但我收到错误:“语法对整数无效”,我发现 postgreSQL 将外键保存为 id ,那我怎么保存呢?

这是我的代码。

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

【问题讨论】:

    标签: django postgresql python-2.7


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您的外键字段是问题所在。 去掉 to_field,Django 会自动映射到 ID

      nomTreballador = models.ForeignKey(treballador)
      

      【讨论】:

        猜你喜欢
        • 2011-04-26
        • 1970-01-01
        • 2012-08-04
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 2016-04-22
        • 1970-01-01
        相关资源
        最近更新 更多