Django के ORM का उपयोग करके प्रोग्रामिंग रूप से दो तालिकाओं में शामिल होना संभव है? मेरे पास दो मॉडल हैं: विषय और वोट। मेरे टेम्पलेट पर मेरे पास विषयों की एक सूची है जो उपयोगकर्ता Reddit जैसे वोट ऊपर/नीचे कर सकते हैं। सबकुछ काम करता है क्योंकि इसे परिणामों को सॉर्ट करने के अलावा इसे छोड़ना चाहिए। मैं यह नहीं समझ सकता कि प्रत्येक ऑब्जेक्ट की वोट गिनती के योग के आधार पर ऑब्जेक्ट्स सूची को सॉर्ट करना है। मैं किसी भी मुद्दे के बिना postgres से वांछित डेटा पुनः प्राप्त कर सकते हैं:कच्चे एसक्यूएल का उपयोग किए बिना Django का उपयोग करके आप दो तालिकाओं में कैसे शामिल हो जाते हैं?
select i.id, i.title, i.date_created, s.object_id, s.vote, Sum(vote)
from topic_topic i, votes s
where i.id = s.object_id
group by 1, 2, 3, 4, 5
order by sum DESC;
यह रिटर्न वांछित परिणाम:
id | title | date_created | object_id | vote | sum
11 | sdfg | 2012-06-04 23:30:17.805671-07 | 11 | 1 | 2
1 | test | 2012-05-13 17:03:24.206092-07 | 1 | 1 | 2
3 | asdf | 2012-05-13 19:23:15.059135-07 | 3 | 1 | 2
2 | adsf | 2012-05-13 19:21:34.180905-07 | 2 | 1 | 2
12 | 11 | 2012-06-04 23:30:54.759158-07 | 12 | 1 | 2
9 | asfd | 2012-05-24 00:26:26.705843-07 | 9 | -1 | -1
4 | asdf | 2012-05-14 19:59:52.450693-07 | 4 | -1 | -2
समस्या है, मुझे यकीन है कि कैसे एक क्वेरीसमूह के रूप में इस पुनः प्राप्त करने के लिए नहीं कर रहा हूँ। फिलहाल मैं वस्तुओं को प्रदर्शित करने के निम्नलिखित का उपयोग कर रहा:
topic_list = Topic.objects.all()
सब कुछ प्रदर्शित करता है के रूप में मैं यह करना चाहते हैं, सॉर्ट क्रम को छोड़कर। मैं पहले प्रदर्शित करने के लिए उच्चतम स्कोर चाहते हैं।
संसाधन मैं पहले से ही पर ध्यान दिया है: https://docs.djangoproject.com/en/dev/topics/db/managers/#adding-extra-manager-methods
How to query as GROUP BY in django?
और बहुत से अधिक है, लेकिन एक नया उपयोगकर्ता के रूप में, एंटी-स्पैम मुझे उन्हें जोड़ने से रोकता है।
बात की मैं कोशिश की है:
चेन:
listed_links = list(chain(topic, score))
दुर्भाग्य से, अगर मैं एक क्रमबद्ध मूल्य इस तोड़ दिया जोड़ने की कोशिश की।
का मेल वस्तु सूचियां:
topic = Topic.objects.all().values_list('user','id', 'title','slug', 'date_created', 'date_updated',)
score = Vote.objects.values('object_id').annotate(total=Sum('vote')).order_by('-total')
results = []
for topic in topic:
results.append(topic)
for score in score:
results.append(topic)
यह सभी वस्तुओं मैं एक सूची में चाहते थे में हुई है, लेकिन मैं समझ नहीं सकता score.object_id
को topic.id
कैसे लिंक करें।
मैंने कच्चे एसक्यूएल डालने का भी प्रयास किया है, लेकिन मुझे नहीं लगता कि मैं इसे सही तरीके से कर रहा हूं, और किसी तीसरे पक्ष द्वारा एसक्यूएल इंजेक्शन का कारण बन सकता है।
मुझे इस परिणाम को डीजेंगो-वोटिंग प्रोजेक्ट में साझा करना अच्छा लगेगा। जैसे मैंने कहा, सबकुछ काम करता है जैसा कि इसे करना चाहिए, सिवाय इसके कि मैं समझ नहीं सकता कि स्कोर desc द्वारा क्रमबद्ध कैसे करें।
============= वोटिंग ========================
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import User
from django.db import models
from voting.managers import VoteManager
from voting.VotedObjectsManager import VotedObjectsManager
SCORES = (
(+1, u'+1'),
(-1, u'-1'),
)
class Vote(models.Model):
"""
A vote on an object by a User.
"""
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
object = generic.GenericForeignKey('content_type', 'object_id')
vote = models.SmallIntegerField(choices=SCORES)
objects = VoteManager()
class Meta:
db_table = 'votes'
# One vote per user per object
unique_together = (('user', 'content_type', 'object_id'),)
def __unicode__(self):
return u'%s: %s on %s' % (self.user, self.vote, self.object)
def is_upvote(self):
return self.vote == 1
def is_downvote(self):
return self.vote == -1
============= विषय मॉडल ========================
from django.db import models
from datetime import datetime
from tinymce import models as tinymce_models
from django.forms import ModelForm
from django.template.defaultfilters import slugify
from tagging.fields import TagField
from tagging.models import Tag
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from django.core import urlresolvers
class Topic(models.Model):
title = models.CharField(max_length=50)
slug = models.SlugField(max_length=50, editable=False)
topic = tinymce_models.HTMLField()
date_created = models.DateTimeField(editable=False)
date_updated = models.DateTimeField(editable=False)
tags = TagField()
def set_tags(self, tags):
Tag.objects.update_tags(self, tags)
def __unicode__(self):
return self.tags
def __unicode__(self):
return self.id
def __unicode__(self):
return self.title
मॉडल हैं ...? –
मैंने मॉडल जोड़े। त्वरित प्रतिक्रिया के लिए धन्यवाद। – user1462141