Django模型外键问题

2024-04-25 20:33:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我对编程和数据库非常陌生,我有一个关于django中foreignkey的问题。在

假设我有一个名为Expenses的模型,它有一个foreignkey指向Employees模型。在

class Employees(models.Model):
    ...

class Expenses(models.Model):
    ...
    employee = models.ForeignKey(Employees)

我看到foreignkey字段是一个员工ID

所以我的问题是,如果在实践中,我在表单上有一个employee's name可供我访问,那么我必须:

  1. Employees表中获取名为employee id
  2. employee id作为外键插入到费用表中,如下所示:

    员工id=雇员.object.get(姓名='John Doe')

    新费用=费用(foo='酒吧',…,员工编号=emp_员工身份证,) 新的_开支.节省()

我做得对吗?如果是这样的话,这是正确的方法吗?在


Tags: django模型id数据库modelmodels编程员工
1条回答
网友
1楼 · 发布于 2024-04-25 20:33:15

模型类名应该是单数的。这在Python中读起来更好。通过在model类中使用class Meta:,可以使关联的数据库表具有不同的名称。另外,默认的管理器是objects,而不是{}。在

你不需要经历那么多麻烦。Django将负责映射id。它在ForeignKey的目标模型中创建一个“反向”字段。这个反向连接的名称是带有ForeignKey加_set的模型的名称。因此,在您的例子中,Employees将有一个自动生成的名为expenses_set的字段,它充当一个管理器,包含员工的所有开支。管理器还有create和{}等方法。你的例子是:

new_expense = (Employee.objects.get(name='John Doe')
    .expense_set.create(foo='bar', ...))

虽然最好保持Employee对象的制表符:

^{pr2}$

(在参数列表中使用时,=周围没有空格。)请注意,您不需要这样设置员工ID。在

也就是说,我们大多数人通过使用ForeignKey参数为反向链接提供更好的名称:

class Expenses(models.Model):
    ...
    employee = models.ForeignKey(Employees, related_name='expenses')

...
employee = Employee.objects.get(name='John Doe')
new_expense = employee.expenses.create(foo='bar', ...)

顺便说一句,如果你想为一个雇员获得费用,有三种方法。一个是上面的:

employee = Employee.objects.get(name='John Doe')
employee_expenses = employee.expenses.all()

或者一句话:

employee_expenses = Employee.objects.get(name='John Doe').expenses.all()

还有:

employee_expenses = Expense.objects.filter(employee__name="John Doe")

__表示取消对ForeignKey的引用以获取其字段。第一种方法执行两个查询,其他方法执行一个查询,但是您不能获得中间的Employee对象供以后使用。在

相关问题 更多 >