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
验证正确的消息数量 - 例如,如果您通过表单分配消息,您可以进行验证那里。
我正在 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
验证正确的消息数量 - 例如,如果您通过表单分配消息,您可以进行验证那里。