سؤال

لدي ملف نماذج يشبه ما يلي:

class WithDate(models.Model):
    addedDate = models.DateTimeField(auto_now_add=True)
    modifiedDate = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

class Match(WithDate):
    ...

class MatchFilter(django_filters.FilterSet):
    class Meta:
        model = Match

class Notify(WithDate):
    matchId = models.ForeignKey(Match)
    headline = models.CharField(null=True, blank=True, max_length=10)

لكل مباراة أحاول الحصول على عدد من السجلات التي لها عنوان. لذا يبدو أن مكالمتي

matchObjs = Match.objects.annotate(notifies_made=Count('notify__headline__isnull'))

هذا يحافظ على رمي فيلدرور. لقد قمت بتبسيط الاستعلام لأسفل

matchObjs = Match.objects.annotate(notifies_made=Count('notify'))

وما زلت أحصل على نفس Fielderror ... لقد رأيت هذا العمل في حالات أخرى (وثائق أخرى ، وآخر مثل أسئلة مثل هذا) لكن لا يمكنني معرفة سبب حصولني على خطأ.

الخطأ المحدد الذي يتم إرجاعه هو كما يلي:

لا يمكن حل الكلمات الرئيسية "الإخطار" في الحقل. الخيارات هي: (جميع الحقول من نموذج المطابقة)

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

تحرير: أنا أستخدم Django 1.1.1

تحرير 2: لقد حاولت إعادة تسمية حقل MatchId لمطابقة فقط ... وقمت بإلغاء فئة WindDate ، مضيفًا في المعدل المضافة و ModifiedDate مباشرة في تعريفات فئة النموذج. لم تتخلص أي من هذه التغييرات من رسالة الخطأ.

تحرير 3: بعد إعادة بناء مقال ملف النماذج الخاص بي ، أدركت أن إدراج مكون من قِبل Django-Filter من Alex Gaynor كان يسبب المشكلة. لم أكن أعتقد أن هذا كان ذا صلة في البداية ، ولكن بما أنه الآن ، فقد قمت بتضمين فئة Filterset Match التي تسبب الخطأ. عندما أقوم بإزالة فئة MatchFilter ، فإنه يعمل بشكل جيد. أحاول أن أذهب عبر رمز مرشح Django لمعرفة سبب حدوث ذلك ، ولكن إذا كان لدى أي شخص آخر فكرة ، فسأكون مهتمًا جدًا!

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

المحلول 2

يبدو أن المشكلة هي أن MatchFilter تم تعريفه قبل نموذج الإخطار في ملف models.py. بمجرد إعادة ترتيب الملف لقراءة كما يلي ...

class WithDate(models.Model):
    addedDate = models.DateTimeField(auto_now_add=True)
    modifiedDate = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

class Match(WithDate):
    ...

class Notify(WithDate):
    matchId = models.ForeignKey(Match)
    headline = models.CharField(null=True, blank=True, max_length=10)

class MatchFilter(django_filters.FilterSet):
    class Meta:
        model = Match

لم أعد أحصل على fielderror.

نصائح أخرى

الاسم الافتراضي للعلاقة العكسية هو اسم النموذج_set ، لذلك يجب أن تحاول:

matchObjs = Match.objects.annotate(notifies_made=Count('notify_set'))

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

matchId = models.ForeignKey(Match, related_name='notify')
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top