मैं ManyToMany रिश्तोंमध्यवर्ती मॉडल (के माध्यम से कीवर्ड) (https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships)Django tastypie: मध्यवर्ती मॉडल
मैं उपयोग करने के साथ Tastypie उपयोग करने के लिए कोशिश कर रहा हूँ का उपयोग कर एक M2M संबंधों के अतिरिक्त मान रही इन मॉडलों के साथ काम:
class Point(models.Model):
...
value = models.FloatField(_('Value'), null=True)
rooms = models.ManyToManyField('rooms.Room', through='points.PointPosition')
class Room(models.Model):
title = models.CharField(max_length=64)
class PointPosition(models.Model):
point = models.ForeignKey('points.Point', verbose_name=_('Point'))
room = models.ForeignKey('rooms.Room', verbose_name=_('Room'))
x = models.IntegerField(_('Y'))
y = models.IntegerField(_('X'))
मैं कई-से-अनेक संबंध लाने के लिए कर लिया है, लेकिन नहीं अतिरिक्त क्षेत्रों । यहाँ मेरी tastypie कोड है:
class PointResource(ModelResource):
class Meta:
queryset = Point.objects.select_related(
depth=10
).prefetch_related('rooms').all()
resource_name = 'point'
allowed_methods = ['get']
...
value = fields.FloatField()
rooms = fields.ToManyField('rooms.api.RoomResource', 'rooms', full=True)
class RoomResource(ModelResource):
class Meta:
queryset = Room.objects.all()
resource_name = 'room'
allowed_methods = ['get']
मैं इस तरह मेरी PointResource में हाइड्रेट कक्ष चर करने के लिए एक विधि का उपयोग करने की कोशिश कर रहा है:
def dehydrate_rooms(self, bundle):
rooms = []
for room in bundle.obj.rooms.all():
position = PointPosition.objects.get(
room_id = room.pk,
point_id = bundle.obj.pk)
rooms.append({'id': room.pk,
'title': room.title,
'x': position.x,
'y': position.y})
return rooms
लेकिन समस्या यह है कि यह बनाता है मेरे पास अंक के रूप में कई क्वेरी हैं: यह वास्तविक प्रदर्शन हत्यारा है जब आपके पास +8000 अंक हैं।
मुझे प्रदर्शन प्राप्त करने के लिए कोई उपयोगी संसाधन नहीं मिला है। मैं QuerySet के लिए उपलब्ध .extra() विधि का उपयोग कर एक कस्टम क्वेरी करने के बारे में सोच रहा था, लेकिन जॉइन कीवर्ड उपलब्ध नहीं है (पैच को दो महीने पहले अस्वीकार कर दिया गया है)। और मुझे यकीन नहीं है कि चयन उपक्कर चाल चलेंगे।
आपके उत्तर के लिए बहुत बहुत धन्यवाद। वास्तव में मैंने जो किया, लेकिन मैंने अपने डिक्शनरी को पुन: व्यवस्थित करने के लिए तत्वों को स्वैप करने के लिए 'डीहाइड्रेट' का उपयोग नहीं किया। कूल टिप :) – Solvik
मैंने खुद को याद दिलाने से पहले स्वादिष्ट से लड़ने में बहुत अधिक समय बिताया कि यह सिर्फ एक साधारण डेटा संरचना का निर्माण कर रहा है और शब्दकोश बनाने के लिए एक भी सही तरीका नहीं था। मेरे पास कम से कम एक संसाधन है जहां एक ग्रेनरी ओवरराइड मॉडल रिसोर्स एक साधारण संसाधन बन गया है जो सीधे ओआरएम को जटिल डेटा संरचना को कुशलतापूर्वक बनाने के लिए कहता है। –