Django:在另一个模型中通过整数值设置外键关系的数量

Django: set number of ForeignKey relations by integer value in another model

我正在 Django 中设计一个 Mturk 应用程序,人们可以根据不同的结果(性别、个性、年龄等)对推文进行评分。在我的模型中,我有三个 类:任务(Mturk 任务)、消息(Twitter 消息)和结果(我希望消息注释的关系)。对于每个任务,我希望能够显示一定数量的推文。因此,例如,如果我想了解有关 Twitter 用户的一些信息,我可能会显示 20 条推文,但如果我想了解有关一条推文的一些信息,我只会显示 1 条推文。

对于每个结果,将有多个任务实例,并且每个消息应该能够在多个任务中使用(可能每个都指向不同的结果)。

所以我的问题是,给定结果模型中的 num_of_tweets,我怎样才能让任务指向那么多消息?有更好的方法吗?

class Outcomes(models.Model):    
    name = models.CharField(max_length=100, )
    short_definition = models.TextField()
    detail_desc = models.TextField()
    num_of_tweets = models.Integer(default=1)

class Tasks(models.Model):
    outcome = models.ForeignKey(Outcomes, blank=True, null=True)
    message = models.ForeignKey(Message)
    mturk_user_id = models.CharField(max_length=100, )
    answer = models.TextField(null=True, blank=True)

class Messages(models.Model):
    message = models.TextField()
    source = models.CharField(max_length=100, )

我的第一个想法是选择最大数量的消息,比如说 5,然后是这样的:

class Tasks(models.Model):
    outcome = models.ForeignKey(Outcomes, blank=True, null=True)
    message1 = models.ForeignKey(Message)
    message2 = models.ForeignKey(Message, blank=True, null=True)
    message3 = models.ForeignKey(Message, blank=True, null=True)
    message4 = models.ForeignKey(Message, blank=True, null=True)
    message5 = models.ForeignKey(Message, blank=True, null=True)
    mturk_user_id = models.CharField(max_length=100, )
    answer = models.TextField(null=True, blank=True)

这很乏味,尤其是因为我知道某些结果最多应显示 20 条推文。

我不太清楚您是如何将消息分配给任务的。但是,如果您需要在关系的每一侧都具有多个元素,则应使用 ManyToManyField,而不是 ForeignKey。

根据您的实际操作,您应该能够根据 num_of_tweets 验证正确的消息数量 - 例如,如果您通过表单分配消息,您可以进行验证那里。