Django: получить информацию из той же таблицы на основе vsalue столбца для записи данных - PullRequest
0 голосов
/ 17 апреля 2011

Я создаю приложение форума для веб-сайта, и у меня есть столбец "quote_id" в таблице "Посты" для добавления post_id, если кто-то цитирует определенное сообщение для ответа. Это часть таблицы сообщений, как и все другие сообщения. Однако, когда я получу все записи, которые соответствуют теме, соответствующей выбранной теме, будет несколько записей, которые цитируют другие сообщения. Кажется, я не могу найти способ сделать это в Django ORM, чтобы получить информацию о цитируемых сообщениях для отображения вместе с сообщением, которое цитировало его (для отображения в сообщении, которое цитировало его). То, что у меня пока есть, ниже:

def show_topic_posts(request,forum_id,topic_id):
    posts = Post.objects.filter(topic_id=topic_id)
    topic = Topic.objects.get(topic_id=topic_id)
    context = RequestContext(request,{'posts':posts,'topic':topic})
    return render_to_response('forums/topics_posts.html',context_instance=context)

class Post(models.Model):
    post_id = models.AutoField(primary_key=True)
    forum_id = models.ForeignKey(Forum)
    topic_id = models.ForeignKey(Topic)
    post_date_time = models.DateTimeField(auto_now=True)
    post_user_id = models.ForeignKey(User)
    post_quote_id = models.IntegerField(null=True,blank=True)
    post_body = models.TextField()
    post_likes = models.IntegerField(default=0)
    post_is_flagged = models.BooleanField(default=False)

def __unicode__(self):
    return '%i' % self.topic_id

def get_absolute_url(self):
    return '/forums/%s/%s/%s/' % (str(self.forum_id.pk), str(self.topic_id.pk),self.topic_id)

Как в мире я могу это сделать? Я искал Google и сайт Django Book и Django, пытаясь найти способ сделать это. Спасибо!

1 Ответ

2 голосов
/ 17 апреля 2011

Удалите поле post_quote_id и создайте рекурсивные m2m-отношения для вашей Post модели.

quoted_by = models.ManyToManyField('self')

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

example_post = Post.objects.get(pk=1)
posts_that_quote_my_example_post = example_post.quoted_by.all()

И в вашем шаблоне вы можете получить сообщения, которые цитируют конкретное сообщение, например:

<ul>
  {% for quote in post.quoted_by.all %}
    <li>{{ quote.post_body }}</li>
  {% endfor %}
</ul>

Если вы хотите дополнительно сохранить человека, который цитировал определенную публикацию, вам нужно добавить посредническую модель , используя сквозной параметр .

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