我正在和Django(德语-瑞典语)一起开发一个词汇培训项目。应用程序的词汇数据由大量的“词汇卡”组成,每个“词汇卡”都包含一个或多个德语单词或对应于一个或多个瑞典语词汇的词汇。培训仅适用于注册用户,因为应用程序通过为每个词汇卡保存score来跟踪用户的性能。词汇卡有一个级别(基本、高级、专家)和分配给它们的任意数量的标签。当注册用户开始培训时,应用程序需要计算每个级别和标记的用户平均分数,以便他进行选择。我通过引入一个名为CardByUser的模型来解决这个问题,该模型与score和ForeignKey模型具有User和field以及Card关系。现在我可以使用Django的聚合函数计算平均分数。最大的缺点是:只有在DB中存在的每个卡实例都有一个CardByUser实例,即使用户只接受了100张训练卡。我当前的解决方案是在创建和注册用户时创建所有那些CardByUser实例。当然,这在数据库内存和计算时间方面都是相当无益的(注册用户需要相当长的时间)。它看起来很不优雅,哪种最让我讨厌。有更好的办法吗?在计算aCard的平均分时,也许可以告诉Django以下内容:如果给定的 cc >和用户存在,则使用它的分数。如果Card不存在,使用默认值> >分数0。能做到吗?如果是,怎么做?编辑:澄清谢谢洛特的第一个回答,但我觉得我的问题有点复杂。糟糕的是,我试图用模型中的一些实际代码来澄清。class Card(models.Model): entry_sv = models.CharField(max_length=200) entry_de = models.CharField(max_length=200) ... more fields ...class CardByUser(models.Model): user = models.ForeignKey(User) card = models.ForeignKey(Card, related_name="user_cards") score = models.IntegerField(default=0) ... more fields ...这意味着许多CardByUser对象都与单个Card相关。现在在我的视图代码中,我需要创建满足以下条件的CardByUser对象的queryset:相关的CardByUser对象的Card字段包含一个特定的字符串(我现在也不是最优的,但不是我问题的焦点…)用户是当前用户然后我可以把分数加起来。我当前的代码如下(缩写):user_cards = CardByUser.objects.filter(user=current_user) .filter(card__tags__contains=tag.name)avg = user_cards_agg.aggregate(Avg('score'))['score__avg']如果当前用户和CardByUser的Card不存在,它将不包含在聚合中。这就是为什么我创建了所有的分数为0的tags。我怎么才能摆脱这些呢?任何想法都将不胜感激! (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 这就是方法(也许还有属性)的用途。class OptionalFKWithDefault( models.Model ): another = models.ForeignKey( AnotherModel, blank=True, null=True ) @property def another_score( self ): if self.another is None: return 0 else: return self.another.score关于python - Django模型:在不存在外键关系的情况下如何返回默认值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/955815/ (adsbygoogle = window.adsbygoogle || []).push({});
10-10 02:43