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

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

解决方案:

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

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

  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.

给TA打赏
共{{data.count}}人
人已打赏
未分类

在twig中检查电子邮件地址

2022-11-13 21:05:18

未分类

用discord.py编辑消息

2022-11-13 21:05:20

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索