Django中使用一对多关系的同一对象中的多值属性
我必须使用Django创建一个注册应用程序。将有两种模式:事件,包括事件名称和费用;和参与者,包括参与者详细信息及其参与的活动。一名参与者可能参加了多个活动。 保存对象时,我不希望同一参与者的不同事件有多个条目。我想这意味着使用一对多关系字段,这在Django中是找不到的。 我尝试的模式是Django中使用一对多关系的同一对象中的多值属性,django,django-models,one-to-many,Django,Django Models,One To Many,我必须使用Django创建一个注册应用程序。将有两种模式:事件,包括事件名称和费用;和参与者,包括参与者详细信息及其参与的活动。一名参与者可能参加了多个活动。 保存对象时,我不希望同一参与者的不同事件有多个条目。我想这意味着使用一对多关系字段,这在Django中是找不到的。 我尝试的模式是 class Event(models.Model): name = models.CharField(max_limit=50) fees = models.IntegerField(defa
class Event(models.Model):
name = models.CharField(max_limit=50)
fees = models.IntegerField(default=100)
class Participant (models.Model):
name = models.CharField(max_limit=50)
event = models.ForeignKey(Event)
receiptno = models.IntegerField(primary_key=True)
我尝试使用外键字段,但它只能存储参与者参与的一个事件。我希望能够在一个参与者对象中存储多个事件(因为无论参与的事件如何,每个参与者都只能手动发出一张收据),我如何做到这一点?您希望的是多对多关系,而不是一对多关系。具体来说,您需要一个具有直通模型的,该模型将记录收据编号
class Participant(models.Model):
name = models.CharField(max_limit=50)
event = models.ManyToManyField('Event', through='Receipt')
class Receipt(models.Model):
receiptno = models.IntegerField()
event = models.ForeignKey('Event')
participant = models.ForeignKey('Participant')
你想要的是多对多的关系,而不是一对多的关系。具体来说,您需要一个具有直通模型的,该模型将记录收据编号
class Participant(models.Model):
name = models.CharField(max_limit=50)
event = models.ManyToManyField('Event', through='Receipt')
class Receipt(models.Model):
receiptno = models.IntegerField()
event = models.ForeignKey('Event')
participant = models.ForeignKey('Participant')
使用OK,但这不会使创建对象的过程变得单调乏味吗?尽管每张收据只有1名参与者,但我需要在两个位置输入相关数据?表示首先输入参与者详细信息,然后输入收据详细信息。有没有一种方法可以在管理端的一个表单中实现这一点?当然,您可以在参与者旁边使用收据作为内联管理表单。很抱歉延迟,谢谢您的回答!对于每个参与活动的人,我都需要一个“参与”的布尔数据成员。在这个结构中,我应该把它放在哪里?我不确定是什么原因-肯定参与者的活动列表中存在的活动就足够了?但是如果你这样做了,你也可以把它放在收据模型上。好吧,但是这难道不会让创建对象的过程变得单调乏味吗?尽管每张收据只有1名参与者,但我需要在两个位置输入相关数据?表示首先输入参与者详细信息,然后输入收据详细信息。有没有一种方法可以在管理端的一个表单中实现这一点?当然,您可以在参与者旁边使用收据作为内联管理表单。很抱歉延迟,谢谢您的回答!对于每个参与活动的人,我都需要一个“参与”的布尔数据成员。在这个结构中,我应该把它放在哪里?我不确定是什么原因-肯定参与者的活动列表中存在的活动就足够了?但是如果你这样做了,你也可以把它放在收据模型上。