سؤال

وأنا أحاول الحصول على نماذج بلدي تتصل باستخدام ReferenceProperty، ولكن ليس لدينا كمية كبيرة من الحظ. لدي 3 مستويات: المجموعة، الموضوع، ثم الايجابيات، والسلبيات. كما هو الحال في البيوت المجموعة موضوعات عديدة، وداخل كل موضوع يمكن أن يكون العديد من إيجابيات وسلبيات.

وأنا قادرة على تخزين المجموعات الجديدة لطيف وجيد، ولكن ليس لدي أي فكرة عن كيفية تخزين موضوعات تحت هذه المجموعات. أريد أن تصل من صفحة مع وصلة "موضوع جديد" تحت كل مجموعة، أن يأخذ منهم إلى نموذج بسيط (1 الحقل حاليا). من الواضح أن URL سوف تحتاج أن يكون نوعا من الإشارة إلى هوية المجموعة أو شيء.

وفيما يلي نماذج بلدي:

class Groups(db.Model):

    group_user = db.UserProperty()
    group_name = db.StringProperty(multiline=True)
    group_date = db.DateTimeProperty(auto_now_add=True)


class Topics(db.Model):

    topic_user = db.UserProperty()
    topic_name = db.StringProperty(multiline=True)
    topic_date = db.DateTimeProperty(auto_now_add=True)
    topic_group = db.ReferenceProperty(Groups, collection_name='topics')

class Pro(db.Model):

    pro_user = db.UserProperty()
    pro_content = db.StringProperty(multiline=True)
    pro_date = db.IntegerProperty(default=0)
    pro_topic = db.ReferenceProperty(Topics, collection_name='pros')    

class Con(db.Model):

    con_user = db.UserProperty()
    con_content = db.StringProperty(multiline=True)
    con_date = db.IntegerProperty(default=0)
    con_topic = db.ReferenceProperty(Topics, collection_name='cons')    

وظيفة واحدة للصفحة الفعلية أريد لإظهار قائمة المجموعات، ثم تحت موضوعاتهم:

class Summary(webapp.RequestHandler):
    def get(self):

        groups_query = Groups.all()
        groups = groups_query.fetch(1000)
        template_values = {

            'groups': groups,           
        }

        path = os.path.join(os.path.dirname(__file__), 'summary.html')
        self.response.out.write(template.render(path, template_values))

وأخيرا أتش تي أم أل:

<html>
  <body>
    <a href="/newgroup">New Group</a>
    <br>
    {% for group in groups %}

    <font size="24">{{ group.group_name|escape }}</font><br> by <b>{{ group.group_user }}</b> at <b>{{ group.group_date }}</b> {{ group.raw_id }}
    <br>
    <a href="/newtopic?id={{group.key.id}}" >New topice </a>
    <br>
    <blockquote>
        {{ topics.topics_name }}
    </blockquote>


    {% endfor %}
  </body>
</html>
هل كانت مفيدة؟

المحلول

وشيء له آثار جانبية، مثل تغيير مخزن (عن طريق إنشاء كائن جديد على سبيل المثال) أن <م> لا أن يكون GET HTTP - الحصول على أنه ينبغي بشكل أساسي فقط ل"قراءة" العمليات. هذا ليس التحذلق، انها قليلا رئيسيا من دلالات HTTP - المتصفحات، مخابئ، وكلاء، وما إلى ذلك، يسمح للعمل على GET عن عمليات للقراءة فقط (على سبيل المثال خلال تخزين النتائج وليس تمرير الطلب إلى الملقم إذا كانت يمكن أن تلبي أنه من ذاكرة التخزين المؤقت).

لتعديلات، الأفعال استخدام HTTP مثل وظيفة (الأكثر شعبية أساسا لجميع المتصفحات تنفذ بشكل صحيح) أو للوضع العمليات المتخصصة (لإنشاء كائنات جديدة) أو حذف (لإزالة الكائنات). أفترض أنك سوف يذهب لاستخدام وظيفة لدعم مجموعة متنوعة من المتصفحات.

لتحصل على وظيفة من مستعرض، تحتاج إما جافا سكريبت wizardy أو الشكل القديم عادي مع طريقة = آخر - سوف أفترض هذا الأخير لالبساطة

.

إذا كنت تستخدم جانغو 1.0 (والذي يدعم محرك التطبيق الآن)، فقد آلياته الخاصة لجعل والتحقق من صحة وقبول أشكال استنادا إلى نماذج. الأطر الأخرى لديها الخاصة طبقاتها متقدمة بالمثل.

إذا كنت ترغب في تجنب الأطر "الغنية" سيكون لديك لتنفيذ بواسطة قوالب يد لأشكال HTML الخاص بك، توجيهها (عبر نوع من إيفاد URL، على سبيل المثال في app.yaml) إلى معالج لك تنفيذ مع def post(self):، والحصول على البيانات من الطلب، التحقق من صحة ذلك، تشكيل وجوه جديدة، ووضعها، وعرض بعض الصفحات الإقرار.

ما هي جزء أو أجزاء من إجراءات غير واضحة بالنسبة لك؟ عنوان السؤال الخاص بك يركز تحديدا على خصائص إشارة لكني لست متأكدا ما هي المشكلة انهم يقدمون لك على وجه الخصوص - من نص سؤالك يبدو انك تكون على تك الصحيح عنها

تعديل : في وأوضح OP الآن في تعليق أن مشكلته هي كيفية جعل شيء من هذا القبيل:

"<a href="/newtopic?id={{group.key.id}}" >New topic </a>" 

والعمل. هناك أكثر من طريقة للقيام بذلك. إذا خدم URL newtopic من شكل ثابت، يمكن للمعالج لمنصب "العمل" من هذا النموذج على العودة إلى أن id= عبر رأس Referer: (أ سيئة السمعة ولكن unfixable سوء الإملاء)، ولكن هذا عالي الكعب قليلا وهشا. أفضل هو أن يكون newtopic URI تخدمها معالج الذي يحصل على def get من الطلب ويدرج في الناتج قالب النموذج id= - على سبيل المثال، في حقل إدخال مخفي. يكون هذا القالب النموذج يحتوي على (بين الحقول الأخرى):

<INPUT TYPE=hidden NAME=thegroupid VALUE={{ theid }}> </INPUT>

ووضع theid في سياق والتي يمكنك تقديم هذا القالب، وسيكون في الطلب أن def post للعمل تلقي شكل أخيرا يحصل.

نصائح أخرى

وفقط للإجابة على السؤال للآخرين وربما كنت أحسب ذلك:

class NewTopic(webapp.RequestHandler):
    def get(self):
      groupId = self.request.get('group')
      # either get the actual group object from the DB and initialize topic with topic_group=object as in 'Nick Johnson's answer, or do as follows
      topic = Topic()
      topic.name = self.request.get("topicname")
      topic.reference = groupId
      topic.put()

والشكر على الرد.

نعم أنا على بينة من الحصول على مقابل آخر. كانت الطبقة نشرت لي فقط في الواقع لطباعة كل المجموعات ().

والقضية لدي هو أنا غير متأكد كيف يمكنني استخدام نماذج للحفاظ على البيانات في نوع من الموضة الهرمي، مع المجموعات> موضوعات> الايجابيات / السلبيات.

والاستيلاء على بيانات بسيطة بما فيه الكفاية وأنا أستخدمه:

class NewGroupSubmit(webapp.RequestHandler):
    def post(self):

        group = Groups()
        if users.get_current_user():
            group.group_user = users.get_current_user()     
        group.group_name = self.request.get('groupname')

        group.put()
        self.redirect('/summary')

وأنا بحاجة الى وظيفة أخرى لإضافة موضوع جديد، التي يخزنها داخل تلك الجماعة. لذلك دعونا نقول المجموعة هي "سيارات" على سبيل المثال. قد تكون الموضوعات "فيراري"، "بورش"، "BMW"، ومن ثم إيجابيات / سلبيات لكل موضوع. وأنا أدرك أنا أكون غامضا بعض الشيء، ولكن هذا لأنني جديدة جدا لdatabasing العلائقية وعدم استخدامها تماما على المصطلحات.

وأنا لست متأكدا تماما ما هي المشكلة كنت تواجه. كل ما ائحة تبدو على ما يرام - يتم تعيين ReferenceProperties تصل وفقا لما هو متوقع من DSCRIPTION الخاص بك. المشكلة الوحيدة أستطيع أن أرى أن في القالب الخاص بك، كنت في اشارة الى متغير "الموضوعات"، والتي لا يعرف في أي مكان، وكنت لا بالتكرار عبر الموضوعات لمجموعة في أي مكان. يمكنك القيام بذلك من هذا القبيل:

<html>
  <body>
    <a href="/newgroup">New Group</a>
    <br>
    {% for group in groups %}

    <font size="24">{{ group.group_name|escape }}</font><br> by <b>{{ group.group_user }}</b> at <b>{{ group.group_date }}</b> {{ group.raw_id }}
    <br>
    <a href="/newtopic?id={{group.key.id}}" >New topice </a>
    <br>
    Topics:
    <ul>
      {% for topic in group.topics %}
        <li>{{topic.topic_name}}</li>
      {% endfor %}
    </ul>
    {% endfor %}
  </body>
</html>

لإنشاء موضوع جديد، ومجرد استخدام منشئ، ويمر في الوسائط المطلوبة:

mytopic = Topic(topic_name="foo", topic_group=somegroup)

وهنا، ينبغي أن يكون somegroup إما كائن المجموعة، أو مفتاح لكائن المجموعة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top