簡體   English   中英

Django管理員自定義選擇formfield選擇

[英]Django admin custom choice formfield choice

在django管理員中,如果數據庫中的字段為None或具有值,但我無法創建自定義選項,但我無法使其正常工作,則只能獲取整個查詢集,但無法獲取數據ID,因此我可以過濾請求。

有什么建議么?

def formfield_for_choice_field(self, db_field, request, **kwargs):
        ordered = False
        qs = self.get_queryset(request)
        for query in qs:
            if query:
                if query.order:
                    ordered = True
        if db_field.name == "status":
            if ordered:
                kwargs['choices'] = (
                    ('Ordered', 'Ordered'),
                    ('Shipped', 'Shipped'),
                    ('Delivered', 'Delivered'),
                    ('Late', 'Late'),
                    ('Never Arrived', 'Never Arrived'),
                )
            else:
                kwargs['choices'] = (
                    ('Shipped', 'Shipped'),
                    ('Delivered', 'Delivered'),
                    ('Late', 'Late'),
                    ('Never Arrived', 'Never Arrived'),
                )
        return super(xxxxxx, self).formfield_for_choice_field(
            db_field, request, **kwargs)

由於在調用此函數時,已經檢索到了模型實例,因此您可以掛鈎該檢索,並使模型實例在當前請求上下文中可用,以便可以在有請求的任何地方輕松使用它:

def get_object(self, *args, **kwargs):
    request._admin_obj = super(xxxxxx, self).get_object(*args, **kwargs)
    return request._admin_obj

def formfield_for_choice_field(self, db_field, request, **kwargs):
    if db_field.name == "status":
        obj = request._admin_obj
        if obj and obj.order:
            kwargs['choices'] =  # ordered_choices
        else:
            kwargs['choices'] =  # unordered_choices
    return super(xxxxxx, self).formfield_for_choice_field(
        db_field, request, **kwargs)

另一種方法是在管理員中使用自定義ModelForm並覆蓋其__init__以修改基於字段選擇的self.instance

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM