Python Django:使用其他模型类作为字段的选项
我正在编写一个Django应用程序,其中包括一个民意调查部分,我想提供创建不同类型问题的功能。因此,我有这些模型用于评级部分Python Django:使用其他模型类作为字段的选项,python,django,oop,django-models,Python,Django,Oop,Django Models,我正在编写一个Django应用程序,其中包括一个民意调查部分,我想提供创建不同类型问题的功能。因此,我有这些模型用于评级部分 # Do I really need this class? class BaseRating(models.Model): class Meta: abstract = True # For questions like: "Rate your experience with XXXXX" class FiveStarRating(BaseRa
# Do I really need this class?
class BaseRating(models.Model):
class Meta:
abstract = True
# For questions like: "Rate your experience with XXXXX"
class FiveStarRating(BaseRating):
rating = models.PositiveSmallIntegerField(null=True, blank=True, validators=[MaxValueValidator(5)])
# For questions like: "Would you recommend XXXXX"?
class YesNoRating(BaseRating):
rating = models.BooleanField()
现在我想创建一个新问题,并指定该问题的评分系统:
- 如果我提出一个问题“您如何评价xxxxx”,我会使用FivesArrating模型
- 如果我创建一个问题“你对xxxx满意吗”,我会使用YesNoRating
class Question(models.Model):
title = models.CharField(max_length=255)
# rating??
# I can't create a foreignkey field to the base class...
<强>编辑:我终于使用了,但是我认为第一个响应也是可接受的:强>
< p>从我所看到的,你没有使用<代码> BaseDeal/<代码>模型,所以删除它是安全的。 至于问题,在我的例子中,我将创建两个新模型,它们都有FivesArrating
和YesNoRating
的外键,因此数据可以彼此独占。所以你会有两个这样的模型
class FiveStarQuestion(models.Model):
title = models.CharField(max_length=255)
rating = fields.ForeignKey(FiveStarRating)
class YesNoQuestion(models.Model):
title = models.CharField(max_length=255)
rating = fields.ForeignKey(YesNoRating)
但是,如果您想在这两个问题之间分享标题(我支持这种方法,因为可能有两个标题相同的问题)
例如:
您如何评价Stackoverflow
及
您对Stackoverflow的满意度如何
只有一个名为Stackoverflow的标题,并将该引用用作表中的外键是有意义的。因此,在本例中,您可以保留问题
模型,并拥有指向它的ForiegnKey
字段
class Question(models.Model):
title = models.CharField(max_length=255)
创建两个模型的步骤如下:
class FiveStarQuestion(models.Model):
title = models.ForeignKey(Question)
rating = fields.ForeignKey(FiveStarRating)
class YesNoQuestion(models.Model):
title = models.ForeignKey(Question)
rating = fields.ForeignKey(YesNoRating)
谢谢尝试适应这种方法的另一个必要条件:模型民意测验,它包含与所有问题的多个关系(因为同一个民意测验可以有不同类型的问题,同一个问题可以在多个民意测验中)。我不想在投票模型中有两个字段(一个用于YesNoQuestions,另一个用于FiveStarQuestion)。