我有一个Django应用程序,它有三个模型,使用ContentTypes和Generic来尝试并允许任务模型使用How to use dynamic foreignkey in Django?作为向导,将ForeignKey指向其他两个模型中的任何一个(尽管我承认,我不知道这种方法会发生什么)。在
class Task(models.Model):
date = models.DateTimeField(null = True)
day = models.IntegerField(null = True)
task = models.CharField(max_length = 100, null = False)
owner = models.CharField(max_length = 25, null = True)
notes = models.CharField(max_length = 250, null = True)
isDone = models.BooleanField(default = False, null = False)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
maintenance = generic.GenericForeignKey('content_type', 'object_id')
class Maintenance(models.Model):
startMonth = models.CharField(max_length = 15, null = False)
startYear = models.IntegerField(null = False)
location = models.CharField(max_length = 20, null = False)
mode = models.CharField(max_length = 20, null = False)
taskRef = generic.GenericRelation(Task)
class Template(models.Model):
name = models.CharField(max_length = 25, null = False)
location = models.CharField(max_length = 20, null = False)
mode = models.CharField(max_length = 20, null = False)
taskRef = generic.GenericRelation(Task)
通常情况下,如果Task只是有一个普通的ForeignKey来维护,我可以使用维护任务集.all(),但是对于这个动态的foreignkey系统,该函数不起作用。有没有人知道有其他的函数调用来实现这种效果?在
就像user710907 says,维护任务参考所有()应该能做到。指定ForeignKey关系时,可以设置用于反向关系的“related_name”参数。如果不指定,则默认为“model_name_set”。在
现在您可以通过
bar.foo
从一侧访问该关系,或者从另一侧通过foo.related_bars
访问该关系。如果不指定,后一个参数将默认为foo.bar_set
。在在您的示例中,您从两边定义关系;FK在Task中定义,引用在Maintenance和Template上定义。由于您在两个模型上都提供了处理关系的字段,因此不需要提供维护设置默认值。在
编辑:经过进一步的检查,我认为部分的混乱可能是关于您的
Task.maintenance
字段。如果我没弄错的话,那就是你想要指向Maintenance
或Template
的字段,对吗?那么它为什么叫maintenance
?我当然建议你也读this section of the docs。在相关问题 更多 >
编程相关推荐