Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django中使用一对多关系的同一对象中的多值属性_Django_Django Models_One To Many - Fatal编程技术网

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

我必须使用Django创建一个注册应用程序。将有两种模式:事件,包括事件名称和费用;和参与者,包括参与者详细信息及其参与的活动。一名参与者可能参加了多个活动。 保存对象时,我不希望同一参与者的不同事件有多个条目。我想这意味着使用一对多关系字段,这在Django中是找不到的。 我尝试的模式是

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名参与者,但我需要在两个位置输入相关数据?表示首先输入参与者详细信息,然后输入收据详细信息。有没有一种方法可以在管理端的一个表单中实现这一点?当然,您可以在参与者旁边使用收据作为内联管理表单。很抱歉延迟,谢谢您的回答!对于每个参与活动的人,我都需要一个“参与”的布尔数据成员。在这个结构中,我应该把它放在哪里?我不确定是什么原因-肯定参与者的活动列表中存在的活动就足够了?但是如果你这样做了,你也可以把它放在收据模型上。