django模型引用,在引用中加入更多的反义词。

问题描述 投票:0回答:1

enter image description here我有一个关于Django模型引用的问题。

我想给一个ForeignKey或者ManytoManyField添加更多的约束条件,像这样。

question_id = models.ManyToManyField(Question(open==True))

或者再加一个类似的约束条件。

事实上,我不想显示一个没有打开的问题(在Answer表单中加高,如上图),当然,我已经通过一些查询来实现了,但是Django有任何内置的支持吗?我也试过其他的方法,但是没有用。谢谢!我有一个关于Django的问题。

class Answer(models.Model):
    """Give answers"""
    answer = models.TextField()
    question_id = models.ManyToManyField(Question(open==True))
    upVote = models.IntegerField(default=0)
    downVote = models.IntegerField(default=0)

    def __str__(self):
        """return string  """
        return self.answer
django model foreign-keys manytomanyfield
1个回答
1
投票

趁着现在还可以,改变你的模型关系。你现在的情况是,一个答案可以链接到多个问题。然而,答案包含了向上和向下的投票。

所以,我可以创建两个问题。

  1. 是1+1二?
    • 没有
  2. 1+1是三吗?
    • 没有

我可以把 "是 "和 "不是 "这两个问题的答案联系起来,只要有好的接口就可以方便,而且是规范化的。但是 他们将 分享升压票. 相反,答案应该有一个外键到问题,因为一个答案一次只能链接到一个问题,即使答案文字相同也要防止上下票共享。

其次,我们一般不把字段命名为 question_idquestion:从对象关系的角度来看,你把一个问题的答案与一个问题的id联系起来,而不是与一个问题的id联系起来(兜底。question_id 是为了加快查询速度,并作为基础数据库表中的字段名)。)

在你的实际问题上:你想限制可用的选择,这正是 limit_choices_to 为你做的。所以你最终会得到这样的结果。

class Answer(models.Model):
    """Give answers"""
    answer = models.TextField()
    question = models.ForeignKey(
        Question, on_delete=models.CASCADE, related_name='answers',
        limit_choices_to={'open': True},
    )
    upVote = models.IntegerField(default=0)
    downVote = models.IntegerField(default=0)

    def __str__(self):
        """return string  """
        return self.answer

# Serializer
class AnswerSerializer(serializers.ModelSerializer)
    class Meta:
        model = Answer
        fields = ('answer', 'upVote', 'downVote', 'question_id')

如你所见,你的序列化器可以引用神奇的字段。question_id.

© www.soinside.com 2019 - 2024. All rights reserved.