سؤال

هذه المشكلة غريبة جداً وأتمنى أن يساعدني أحد.من أجل الجدال، لدي نموذج مؤلف له علاقة ExternalKey بنموذج الكتاب.عندما أقوم بعرض مؤلف، أرغب في الحصول على ChoiceField الذي يعرض الكتب المرتبطة بهذا المؤلف فقط.على هذا النحو، أتجاوز AuthorForm.فيه() وأقوم بإنشاء قائمة اختيارات (صفوف) بناءً على استعلام يقوم بتصفية الكتب بناءً على معرف المؤلف.الصف عبارة عن مركب من معرف الكتاب واسم الكتاب (على سبيل المثال، (1، 'موبي ديك')).يتم بعد ذلك تعيين هذه "الاختيارات" إلى سمة اختيارات ModelForm.

عندما يتم عرض النموذج في القالب، يتم عرض ChoiceField بشكل صحيح، مع إدراج الكتب المرتبطة بهذا المؤلف فقط.

هذا هو المكان الذي تصبح فيه الأمور غريبة.

عندما أحفظ النموذج، أتلقى خطأ ValueError (لا يمكن تعيين "u'1'":Author.book" يجب أن يكون مثيل كتاب).هذا الخطأ منطقي بسبب علاقة FK.ومع ذلك، إذا قمت بإضافة عبارة "طباعة" إلى التعليمات البرمجية، ولم أجري أي تغييرات أخرى، ثم قمت بحفظ السجل، فسيتم العمل.يختفي ValueError بطريقة سحرية.لقد حاولت ذلك عدة مرات، مع التأكد من أنني لم أقم بإجراء تغيير آخر عن غير قصد، وأنه يعمل في كل مرة.

هل يعرف أحد ما الذي يحدث هنا؟

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

المحلول

لست متأكدًا تمامًا من الخطأ الذي تفعله، ولكن من الأفضل تعديل مجموعة الاستعلامات فقط:

class ClientForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        self.affiliate = kwargs.pop('affiliate')
        super(ClientForm, self).__init__(*args, **kwargs)
        self.fields["referral"].queryset = Referral.objects.filter(affiliate = self.affiliate)

    class Meta:
        model = Client

ما ورد أعلاه مقتبس مباشرة من أحد مشاريعي وهو يعمل بشكل مثالي لإظهار كائنات الإحالة المتعلقة بالشركة التابعة التي تم تمريرها فقط:

form = ClientForm(affiliate=request.affiliate)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top