django - many-to-many 和 one-to-many 关系

django - many-to-many and one-to-many relationships

我在 django 工作,正在为用户规划一个游乐设施数据库。

我的问题是-

  1. 我在 django 文档中看到我应该在模型的 One 中放置一个 many-to-many 字段。哪一个重要?而且,它是否会创建一个新的 table,如 rides_users?

  2. 而且,使用 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 时,我想要 driverdestinationmid_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")