django - many-to-many 和 one-to-many 关系
django - many-to-many and one-to-many relationships
我在 django 工作,正在为用户规划一个游乐设施数据库。
每个用户可以在多个游乐设施(随着时间的推移)和每个游乐设施 中可以有多个 Users (乘客)。
此外,对于每个 Ride,必须只有一个 Driver(也是一个 User)所以我想我有一个 many-to Rides 和 Users table 之间的许多 关系对于 user 是什么 ride,以及 Rides 的 Driver_id 和 User_id 之间的 One-To-Many 关系。对吧?
我的问题是-
我在 django 文档中看到我应该在模型的 One 中放置一个 many-to-many 字段。哪一个重要?而且,它是否会创建一个新的 table,如 rides_users?
而且,使用 foreignKey 之间有什么区别( 在 One-To-many 关系 中)字段和一个 OneToManyField 字段?
编辑:
目前我的机型有:
def get_image_path(models.Model):
return os.path.join('photos',str(instance.id),filename)
class UserProfile(models.Model):
user=models.OneToOneField(User)
phone_number=models.CharField(max_length=12)
profile_picture=models.ImageField(upload_to=get_image_path, black=True, null=True)
class Ride(models.Model):
driver=models.ForeignKey(UserProfile, related_name="r_driver")
destination=models.ForeignKey(Destination, related_name="r_final_destination")
leaving_time=models.DateTimeField()
num_of_spots=models.IntergerField()
passengers=models.ManyToMany(UserProfile, related_name="r_passengers")
mid_destinations=models.ManyToMany(Destination, related_name="r_mid_destinations")
class Destination(models.Model):
name=models.CharField(max_length=30)
如您所见,每个行程有 多名 mid_destination 和 多名 名乘客。 a Ride 还有 One driver 和 One 最终目的地。
问题是 - 当 User 添加 Ride 时,我想要 driver、destination 和 mid_destinations 以及其余字段由 User 设置(driver 是用户添加行程),Except passengers 字段。我希望其他用户将自己添加到行程中,因此在创建行程时,用户 (driver) 不必设置乘客。
我该怎么做?还有,关于模型的任何其他建议?
没有 OneToManyField 这样的东西。
从实用的角度来看,ManyToManyField 位于哪一边并不重要。就我个人而言,我会把它放在 Ride 上,这既是为了避免更改用户模型,也是因为从概念上讲,我会说游乐设施是这里的主要对象。
是的,添加字段会自动创建链接 table。
你想要的大概是这样的
class MyModel(models.Model):
driver = models.ForeignKey(to=User, related_name='r_driver')
# you need to use a related name if you want to link to the same model more than once
passengers = models.ManyToManyField(User, related_name="r_passengers")
我在 django 工作,正在为用户规划一个游乐设施数据库。
每个用户可以在多个游乐设施(随着时间的推移)和每个游乐设施 中可以有多个 Users (乘客)。
此外,对于每个 Ride,必须只有一个 Driver(也是一个 User)所以我想我有一个 many-to Rides 和 Users table 之间的许多 关系对于 user 是什么 ride,以及 Rides 的 Driver_id 和 User_id 之间的 One-To-Many 关系。对吧?
我的问题是-
我在 django 文档中看到我应该在模型的 One 中放置一个 many-to-many 字段。哪一个重要?而且,它是否会创建一个新的 table,如 rides_users?
而且,使用 foreignKey 之间有什么区别( 在 One-To-many 关系 中)字段和一个 OneToManyField 字段?
编辑:
目前我的机型有:
def get_image_path(models.Model):
return os.path.join('photos',str(instance.id),filename)
class UserProfile(models.Model):
user=models.OneToOneField(User)
phone_number=models.CharField(max_length=12)
profile_picture=models.ImageField(upload_to=get_image_path, black=True, null=True)
class Ride(models.Model):
driver=models.ForeignKey(UserProfile, related_name="r_driver")
destination=models.ForeignKey(Destination, related_name="r_final_destination")
leaving_time=models.DateTimeField()
num_of_spots=models.IntergerField()
passengers=models.ManyToMany(UserProfile, related_name="r_passengers")
mid_destinations=models.ManyToMany(Destination, related_name="r_mid_destinations")
class Destination(models.Model):
name=models.CharField(max_length=30)
如您所见,每个行程有 多名 mid_destination 和 多名 名乘客。 a Ride 还有 One driver 和 One 最终目的地。
问题是 - 当 User 添加 Ride 时,我想要 driver、destination 和 mid_destinations 以及其余字段由 User 设置(driver 是用户添加行程),Except passengers 字段。我希望其他用户将自己添加到行程中,因此在创建行程时,用户 (driver) 不必设置乘客。
我该怎么做?还有,关于模型的任何其他建议?
没有 OneToManyField 这样的东西。
从实用的角度来看,ManyToManyField 位于哪一边并不重要。就我个人而言,我会把它放在 Ride 上,这既是为了避免更改用户模型,也是因为从概念上讲,我会说游乐设施是这里的主要对象。
是的,添加字段会自动创建链接 table。
你想要的大概是这样的
class MyModel(models.Model):
driver = models.ForeignKey(to=User, related_name='r_driver')
# you need to use a related name if you want to link to the same model more than once
passengers = models.ManyToManyField(User, related_name="r_passengers")