2015-05-18 2 views
0

Я разрабатываю приложение Mturk в Django, где люди оценивают Tweets для разных результатов (пол, личность, возраст и т. Д.). В моих моделях у меня есть три класса: Задача (задача Mturk), Сообщение (сообщение Twitter) и Итог (отношение, которое я хочу, чтобы аннотация аннотировала). Для каждой задачи я хочу отображать определенное количество твитов. Так, например, если я хочу что-то узнать о пользователе Twitter, я могу показать 20 твитов, но если я хочу что-то узнать о одном твитте, я покажу только 1 твит.Django: установить количество отношений ForeignKey по целочисленному значению в другой модели

Для каждого результата будет множество экземпляров задачи, и каждое сообщение должно быть использовано в нескольких задачах (возможно, каждый указывает на разные результаты).

Итак, мой вопрос: учитывая, что 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 чириканье.

+0

Вы когда-нибудь рассматривали возможность использования базы данных nosql для этой задачи/проекта? Вы получите гибкую таблицу (документ в nosql). – sobolevn

+0

Нет, посмотрим на это. Я новичок в Django, базах данных и Mturk, поэтому я просто строю из какого-то существующего кода, который мне теперь нужно обобщать (вот почему я добавляю возможность показывать n количество чириканье). – Sal

ответ

1

Я не совсем понимаю, как вы назначаете сообщения для задач. Однако, если вам нужна возможность иметь несколько элементов с каждой стороны отношений, вы должны использовать ManyToManyField, а не ForeignKey.

В зависимости от того, что вы на самом деле делаете, вы должны иметь возможность проверить правильное количество сообщений в соответствии с num_of_tweets - например, если вы назначаете сообщения через форму, вы можете сделать валидацию там.

+0

Спасибо, просто смотрел на это, когда вы отправили ответ. – Sal

Смежные вопросы