سؤال

يزيل الرمز أدناه قيمًا معينة من القائمة المنسدلة. إنه يعمل بشكل جيد ولكني أريد إزالة القيمة إذا كان المستخدم يفتقر إلى أذونات معينة. كيف يمكنني الوصول إلى طلب. المستخدم في مُنشئ Modelform؟ أم أن هناك طريقة أفضل لإنجاز ما أحاول فعله؟

class AnnouncementModelForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(AnnouncementModelForm, self).__init__(*args, **kwargs)
        self.fields["category"].queryset = AnnouncementCategory.objects.filter(can_post=True)   
هل كانت مفيدة؟

المحلول 2

حسنًا ، ها هي الطريقة التي حللت بها:

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == "category" and not request.user.has_perm('can_post_to_all'):
        kwargs["queryset"] = AnnouncementCategory.objects.filter(can_post=True)
        return db_field.formfield(**kwargs)
    return super(AnnouncementAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

نصائح أخرى

كيف يمكنني الوصول إلى طلب. المستخدم في مُنشئ Modelform؟

لاستخدامه في مُنشئ النماذج ، فقط تمرير الطلب إليه.

class AnnouncementModelForm(forms.ModelForm):

    def __init__(self, request, *args, **kwargs):
        super(AnnouncementModelForm, self).__init__(*args, **kwargs)
        qs = request.user.foreignkeytable__set.all()
        self.fields["category"].queryset = qs
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top