【问题标题】:Django Foreign Key and FormsDjango 外键和表单
【发布时间】:2016-08-24 05:14:57
【问题描述】:

我是 Django 新手,想知道是否可以得到一些帮助。 我试图在我的模板中为 ToolCheckOut 显示一个表单,该表单将具有两个引用我的两个模型的外键。我不断收到此错误,但没有找到解决方案。错误:“强制转换为 Unicode:需要字符串或缓冲区,长期发现”它在我的模板上为这一行给出了这个错误:“{{form.as_p}}”

我正在使用我之前为这个项目构建的 mysql 数据库。

表格:

class ToolCheckoutCreateForm(forms.ModelForm):
    class Meta:
        model = ToolTransaction
        fields = [
            "ToolID",
            "Quantity",
            "PartyID",
            "CheckOutDate",
            "CheckInDate",
        ]

型号:

class Tool(models.Model):
    ToolID=models.CharField(max_length=100, primary_key = True, unique=True, null=False)
    Quantity=models.IntegerField(null=False)
    Location=models.CharField(max_length=100, null=False)
    CategoryID=models.IntegerField(null=True)
    Deleted=models.BooleanField(default=0)

    objects=models.Manager()

    class Meta:
            managed=True
            db_table='Tool'

    def __unicode__(self):
        return self.ToolID

    def get_absolute_url(self):
        return reverse("ToolSearch:toolSearchResults", kwargs={"pk": self.ToolID})

class Party(models.Model):
    PartyID=models.AutoField(primary_key=True)
    FirstName=models.CharField(max_length=100, null=False)
    LastName=models.CharField(max_length=100, null=False)
    PhoneNumber=models.CharField(max_length=25, null=False)
    Organization=models.CharField(max_length=100, null=True)
    Deleted=models.BooleanField(default=0)

    objects=models.Manager()

    class Meta:
        managed=True
        db_table='Party'

    def __unicode__(self):
        return self.PartyID

    def get_absolute_url(self):
        return reverse("ToolSearch:borrowerUpdate", kwargs={"pk": self.PartyID})


class ToolTransaction(models.Model):
    CheckOutID=models.AutoField(primary_key=True)
    ToolID=models.ForeignKey(Tool, on_delete=models.CASCADE)
    PartyID=models.ForeignKey(Party, on_delete=models.CASCADE)
    Quantity=models.IntegerField(null=False)
    CheckOutDate=models.DateField(null=False)
    CheckInDate=models.DateField(null=True)
    Deleted=models.BooleanField(default=0)

    objects=models.Manager()

    class Meta: 
        managed=True
        db_table='ToolTransaction'
        ordering=('CheckOutID',)

    def __unicode__(self):
        return str(self.CheckOutID) or u''

    def get_absolute_url(self):
        return reverse("ToolSearch:toolCheckout", kwargs={"pk": self.CheckOutID})

模板:

<form method = 'POST' action=''>
        {% csrf_token %}
        {{form.as_p}}
        <input type = 'submit' class = "button" value = 'Save'/>

任何帮助将不胜感激!

【问题讨论】:

  • 请显示完整的回溯。

标签: django django-models django-forms django-templates django-views


【解决方案1】:

__unicode__() 必须始终返回字符串或 unicode。 Party.__unicode__() 没有。要修复,请将返回值显式转换为字符串:return str(self.PartyID)

【讨论】:

  • 非常感谢。我将我的派对模型返回更新为字符串,现在一切正常。你是我的英雄!
【解决方案2】:

像这样添加方法。

def __unicode__(self):
    return u"%i" % self.CheckOutID

文档说:

每当您在对象上调用 unicode() 时,都会调用 unicode() 方法。由于 Django 的数据库后端会在模型的属性中返回 Unicode 字符串,因此您通常需要为模型编写 unicode() 方法。

【讨论】:

  • ToolTransatction 模型已经有一个 __unicode__ 方法,它返回 self.CheckOutID 转换为字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
  • 2016-10-12
  • 2010-11-15
  • 1970-01-01
  • 2019-11-16
相关资源
最近更新 更多