2012-02-24 101 views
5

我知道,一般的Django会创建一个名为user_id,如果我只是做类似Django的:如何有多个外键,引用相同的表中的一个表

from django.db import models 

class Order(models.Model): 
    user = models.ForeignKey(User) 
    comments = models.CharField(max_length=400) 
    date_created = models.DateTimeField('created date') 

class User(models.Model): 
    name = models.CharField(max_length=200) 
    age = models.IntegerField() 

但如果我需要三个外键在Order不同的外键,所有的点User?这三个外键会user_createduser_modifieduser_status

+0

的可能的复制[我怎么能有两个外键在Django相同的模型?(https://stackoverflow.com/questions/543377/how-can-i-have-two-foreign-keys-to -the-同一模型在Django的) – 2017-08-14 14:32:11

回答

13

该解决方案实际上是直截了当:

class Order(models.Model): 
    user_status = models.ForeignKey(User, related_name = 'orders_status') 
    user_created = models.ForeignKey(User, related_name = 'orders_created') 
    user_modified = models.ForeignKey(User, related_name = 'orders_modified') 

你只需要定义单独related_name,以免发生歧义从访问用户对象的订单时。

+0

好了,你的'user'在这种情况下会是'user_status'?有没有理由不为第一个使用'related_name'? – hobbes3 2012-02-24 22:26:55

+0

第一个就是默认的相关名称,并通过'user.order_set'被访问 - 当然,人们也可以在此指定自定义相关的名称为好。 – alex 2012-02-24 22:31:16

+0

...是的,第一个是user_status - 我忽略了它在您的文章和更新我的回答 – alex 2012-02-24 22:33:36

相关问题