django模型结构基于第三模型的多对多关系

时间:2009-04-02 15:19:52

标签: django django-models

我目前有三种型号:

class Request(models.Model):
    requester=models.CharField()
    dateRequested = models.DateField(auto_now=True)
    title= models.CharField(max_length=255)
    description = models.TextField()

class RequestType(models.Model):
    requestType=models.CharField('Request Type', max_length=256)

class RequestTypeInfo(models.Model):
    requestType=models.ForeignKey('RequestType', verbose_name='Request Type')
    title = models.CharField('title', max_length=256)
    info = models.CharField(max_length=256, blank=True)

这个想法是每个请求都显示所有类型的请求共有的信息,并根据所选的请求类型向要填写的用户显示其他字段。

如何更改模型以允许此操作以及如何编写视图以向用户显示表单,以便附加信息与基本请求一起显示。有第二个视图要求提供更多信息会不会更好。

最终目标是管理员可以创建新的请求类型,而无需在python中创建模型,只需添加新请求并添加任何其他信息字段。

1 个答案:

答案 0 :(得分:1)

您是说要使用RequestType作为中间模型,从Request到RequestTypeInfo创建多对多关系?

class Request(models.Model):
    requester=models.CharField()
    dateRequested = models.DateField(auto_now=True)
    title= models.CharField(max_length=255)
    description = models.TextField()
    request_type = models.ManyToManyField(RequestType, through='RequestTypeInfo')

class RequestType(models.Model):
    requestType=models.CharField('Request Type', max_length=256)

class RequestTypeInfo(models.Model):
    requestType=models.ForeignKey('RequestType', verbose_name='Request Type')
    title = models.CharField('title', max_length=256)
    info = models.CharField(max_length=256, blank=True)

在澄清后,我们可以讨论内联管理模型。