我通过表单POST方法存储'payment'模型实例但我已经拥有了外键字段的数据,因为我来自列出'student'模型对象的页面。我通过input type =“hidden”html元素存储外键字段。
但是当我提交时,它会显示错误
> Cannot assign "u'1'": "payment.student" must be a "student" instance.
> Request Method: POST
> Django Version: 1.5.2
> Exception Type: ValueError
> Exception Value:
> Cannot assign "u'1'": "payment.student" must be a "student" instance.
> Exception Location: /usr/local/lib/python2.7/dist-> > > > >packages/django/db/models/fields/related.py in __set__, line 405
>Python Executable: /usr/bin/python
>Python Version: 2.7.3
这是我的模特:
class payment(models.Model):
Id = models.AutoField(primary_key=True)
student = models.ForeignKey('student',db_column='student')
dateTime = models.DateField(auto_now_add=True)
amountDue = models.DecimalField(max_digits=5, decimal_places=2)
我后来添加了db_column='student'
,但它可能在mysql数据库中没有真正生效。
答案 0 :(得分:0)
请勿尝试为int
分配payment.student
。
分配student
个实例。
payment.student = student.get(pk=1) # Desired value `1` for foreign key assumed
此外,您应遵循编码样式规则(阅读PEP8
):
您的代码将在没有此规则的情况下工作,但作为Python开发人员,我们有一些可读代码标准。
在Django中,您不必定义主键字段 - 它是自动创建的,可通过instance.pk
访问。
而且我不确定您是否真的希望外键指向student
表的student
列。
如果在其他模块中定义了模型,您可以导入student
模型。
因此,通过这些更正,您的类定义应该是:
from other_app.models import Student
class Payment(models.Model):
student = models.ForeignKey(Student)
date_time = models.DateField(auto_now_add=True)
amount_due = models.DecimalField(max_digits=5, decimal_places=2)
现在任何Payment实例都有隐含字段pk
,它代表主键。
并在您的视图中使用样式更正完成一行:
payment.student = Student.get(pk=1) # Desired value `1` for foreign key assumed
# payment is instance so all lowercase here
# Student on the right side is a class so started with capital