Django外键和表格

时间:2016-08-24 05:14:57

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

我是Django的新手,想知道我是否能得到一些帮助。 我试图在我的模板中显示一个ToolCheckOut的表单,它将有两个外键引用我的两个模型。我一直收到这个错误,没有找到解决方案的运气。错误:"强制转换为Unicode:需要字符串或缓冲区,长期找到"它在我的模板上为此行提供了此错误:" {{form.as_p}}"

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

形式:

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'/>

模板:

<div class="doc-schedule clearfix">
  <p>
    <table style="border: 0px;border-style: none">
      <tr>
        <td><strong>Speciality</strong></td>
        <td class="tdPadding"><span>{{ page.dentist_specialty }}</span></td>
      </tr>
      <tr>
        <td><strong>Education</strong></td>
        <td class="tdPadding"><span>{{ page.dentist_education }}</span></td>
      </tr>
      <tr>
        <td><strong>Work Days</strong></td>
        <td class="tdPadding"><span>{{ page.dentist_workdays }}</span></td>
      </tr>
    </table>
  </p>
</div>
........

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

添加这样的方法。

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

文档说:

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