gpt4 book ai didi

python - 存储外键,不是来自表单 POST 方法,而是我已经拥有的表单数据

转载 作者:行者123 更新时间:2023-11-30 23:13:45 25 4
gpt4 key购买 nike

我正在通过表单 POST 方法存储“支付”模型实例,但我已经有了外键字段的数据,因为我来自一个列出“学生”模型对象的页面。我通过 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数据库中可能没有真正生效

最佳答案

不要尝试为 payment.student 分配 int。分配 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 代表主键。最后在您的 View 中添加样式更正的一行:

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

关于python - 存储外键,不是来自表单 POST 方法,而是我已经拥有的表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18790534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com