【发布时间】:2015-01-08 15:38:08
【问题描述】:
我有一个相当复杂的模型设置:
- 音频文件存储在不同的数据库中。
- 用户可以选择一个数据库,然后一个随机的音频文件应该是 已选中。
对于每个数据库,都有一个可用的问题列表,其中一个将是 也是随机挑选的。
答案已保存,每次用户访问数据库时,我 必须确保他没有得到相同的组合 (音频文件,问题)他已经回答了。
这是我的代码:
class Database(models.Model):
name = models.CharField(max_length=200, unique=True)
questions = models.ManyToManyField(Question)
class AudioData(models.Model):
database = models.ForeignKey(Database)
class Question(models.Model):
...
# added as a helper class for this problem
class AudioQuestionPair(models.Model):
audioData = models.ForeignKey(AudioData)
question = models.ForeignKey(Question)
database = models.ForeignKey(Database)
class NewAnswer(models.Model):
user = models.ForeignKey(User)
question = models.ForeignKey(Question)
audioData = models.ForeignKey(AudioData)
timestamp = models.DateField(auto_now_add=True)
body = models.TextField()
我试图弄清楚,如何(有效且不陷入无限循环)选择可用的音频、问题对。目前我已经到了可以得到答案的地步,其中只包含所需的 ID 和对列表。但我不知道如何从配对中排除答案。
answers = NewAnswer.objects.filter(user=request.user).filter(audioData__database=id).values('audioData_id', 'question_id')
结果
[{'audioData_id': 2, 'question_id': 2}, {'audioData_id': 1, 'question_id': 1}]
并获得所有可用的对
pairs = AudioQuestionPair.objects.filter(database=id).values('audioData_id', 'question_id')
结果
[{'audioData_id': 1, 'question_id': 1}, {'audioData_id': 2, 'question_id': 1}, {'audioData_id': 5, 'question_id': 1}, {'audioData_id': 6, 'question_id': 1}, {'audioData_id': 7, 'question_id': 1}]
我现在如何在第三步中排除它?
【问题讨论】:
标签: python django django-queryset