Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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
Python Django:使用其他模型类作为字段的选项_Python_Django_Oop_Django Models - Fatal编程技术网

Python 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

我正在编写一个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(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)。