جانغو:الاستعلام عن للقراءة فقط مع مفتاح أساسي

StackOverflow https://stackoverflow.com/questions/605896

  •  03-07-2019
  •  | 
  •  

سؤال

class dbview(models.Model):
    # field definitions omitted for brevity
    class Meta:
        db_table = 'read_only_view'

def main(request):
    result = dbview.objects.all()

اشتعلت استثناء حين التقديم:(1054, "Unknown column 'read_only_view.معرف'in 'field list'")

هناك لا يوجد مفتاح أساسي أستطيع أن أرى في الرأي.هل هناك حل?

التعليق:
ليس لدي أي سيطرة على عرض وأنا الدخول مع جانغو.الخلية المتصفح يظهر الأعمدة ولكن لا يوجد مفتاح أساسي.

هل كانت مفيدة؟

المحلول

عندما تقول 'ليس لدي أي سيطرة على عرض وأنا الدخول مع جانغو.الخلية المتصفح يظهر الأعمدة ولكن لا يوجد مفتاح أساسي.'

أعتقد أنك تقصد أن هذا هو إرث الجدول و لا يسمح لك لإضافة أو تغيير الأعمدة?

إذا كان هناك حقا ليس مفتاح أساسي (حتى سلسلة أو غير الباحث العمود*) ثم الجدول لم يتم إعداد بشكل جيد جدا و الأداء قد نتن.

لا يهم أن كنت على الرغم من.كل ما عليك هو عمود هو أن يضمن أن تكون فريدة من نوعها لكل صف.تعيين هذا إلى أن 'primary_key = صحيح في النموذج الخاص بك و جانغو سوف تكون سعيدة.

  • هناك إمكانية أخرى واحدة من شأنها أن تكون problemmatic.إذا كان هناك أي عمود هو أن يضمن أن تكون فريدة من نوعها ثم الجدول قد يكون استخدام مركب المفاتيح الأساسية.وهذا هو - هو تحديد عمودين معا سيوفر فريد المفتاح الأساسي.هذا هو تماما صالحة العلائقية النمذجة ولكن للأسف غير معتمد من قبل جانغو.في هذه الحالة لا يمكنك أن تفعل الكثير إضافة إلى الخام SQL إلا إذا كان يمكنك الحصول على آخر إضافة عمود.

نصائح أخرى

لدي هذه المشكلة في كل وقت.لدي وجهة النظر التي كنت لا تستطيع أو لا تريد أن تتغير ، ولكن أريد أن يكون صفحة لعرض مركب المعلومات (ربما في قسم الادارة).لقد تجاوز حفظ و رفع NotImplementedError:

    def save(self, **kwargs):
        raise NotImplementedError()

(على الرغم من أن هذا ربما لا يحتاج إليها في معظم الحالات ، لكن ذلك يجعلني أشعر أفضل قليلا)

أنا أيضا تعيين تمكنت كاذبة في الطبقة الفوقية.

    class Meta:
       managed = False

ثم أنا مجرد اختيار أي مجال و علامة المفتاح الأساسي.لا يهم إذا كان هو حقا فريدة من نوعها مع أنت فقط تقوم عوامل التصفية لعرض المعلومات على الصفحة ، إلخ.

ويبدو أن تعمل بشكل جيد بالنسبة لي.يرجى commment إذا كان هناك أي مشاكل مع هذه التقنية التي أنا يطل.

إذا كان هناك حقا لا يوجد مفتاح أساسي في إطلالة, ثم لا يوجد أي حل بديل.

جانغو يتطلب كل نموذج يكون بالضبط حقل واحد primary_key=True.

ينبغي أن يكون هناك تم إنشاؤها تلقائيا id الحقل عندما هربت syncdb (إذا كان هناك أي المفتاح الأساسي المحدد في النموذج الخاص بك ، ثم جانغو إدراج AutoField بالنسبة لك).

هذا الخطأ يعني أن جانغو يسأل قاعدة البيانات الخاصة بك من أجل id مجال, ولكن لا شيء موجود.يمكنك تشغيل django manage.py dbshell ثم DESCRIBE read_only_view; و بعد النتيجة ؟ هذا وسوف تظهر جميع الأعمدة في قاعدة البيانات.

بدلا من ذلك, يمكنك تضمين نموذج تعريف لك استثناؤها ؟ (وتأكد من أنك لم تغير نموذج التعريف منذ تشغيلك syncdb?)

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