簡體   English   中英

django-select2在django-admin中無法與內聯一起使用

[英]django-select2 not working with inlines in django-admin

這是我的模型和管理類:

---------------------Models-----------------------
from django.contrib.auth.models import User

class PurchaseOrder(models.Model):
    buyer = models.ForeignKey(User)
    is_debit = models.BooleanField(default = False)
    delivery_address = models.ForeignKey('useraccounts.Address')
    organisation = models.ForeignKey('useraccounts.AdminOrganisations')
    date_time = models.DateTimeField(auto_now_add=True)
    total_discount = models.IntegerField()
    tds = models.IntegerField()
    mode_of_payment = models.ForeignKey(ModeOfPayment)
    is_active = models.BooleanField(default = True)
    class Meta:
        verbose_name_plural = "Purchase Orders"

    def __unicode__(self):
        return '%s' % (self.id)

----------------------------------Admin----------------------------------------
"""
This class is used to add, edit or delete the details of item purchased
"""
class PurchasedItemInline(admin.StackedInline):
    form = ItemSelectForm
    model = PurchasedItem
    fields = ['parent_category', 'sub_category', 'item', 'qty', ]
    extra = 10

class BuyerChoices(AutoModelSelect2Field):
    queryset = User.objects.all()
    search_fields = ['username__icontains', ]

class BuyerForm(ModelForm):
    user_verbose_name = 'Buyer'
    buyer = BuyerChoices(
        label='Buyer',
        widget=AutoHeavySelect2Widget(
            select2_options={
            'width': '220px',
            'placeholder': 'Lookup %s ...' % user_verbose_name
            }
        )
    )

    class Meta:
        model = PurchaseOrder
        fields = '__all__'

"""
This class is used to add, edit or delete the details of items
purchased but buyer has not confirmed the items purchased, this class
inherits the fields of PurchaseOrder derscribing the delivery address of
buyer , is_debit , total discount , tds and mode of payment
"""
class PurchaseOrderAdmin(admin.ModelAdmin):
    form = BuyerForm
   #list_display = ['id','buyer','delivery_address','date_time','is_active']
    inlines = [PurchasedItemInline]
  # model = PurchaseOrder
   #actions = [mark_active, mark_inactive]
   #list_filter = ['date_time']
   #search_fields = ['id']
    list_per_page = 20
    def response_add(self, request, obj, post_url_continue=None):
        request.session['old_post'] = request.POST
        request.session['purchase_order_id'] = obj.id
        return HttpResponseRedirect('/suspense/add_distance/')

我正在嘗試實現django-select2 ,但是當我在PurchaseOrderAdmin使用內聯時,它沒有顯示實現django-select2的字段:

屏幕截圖1

但是當我刪除內聯時,它可以正常工作:

屏幕截圖2

編輯

這是ItemSelectForm

class ItemSelectForm(forms.ModelForm):
    class Media:
        js = (
            'http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js',
            'js/ajax.js', 
        )

    try:
        parent_category = forms.ModelChoiceField(queryset=Category.objects.\
            filter(parent__parent__isnull=True).filter(parent__isnull=False))

        sub_category_id = Category.objects.values_list('id',flat=True)
        sub_category_name = Category.objects.values_list('name',flat=True)
        sub_category_choices = [('', '--------')] + [(id, name) for id, name in
        itertools.izip(sub_category_id, sub_category_name)]
        sub_category = forms.ChoiceField(sub_category_choices)
    except:
        pass

    item = forms.ModelChoiceField(queryset = Product.objects.all())

    def __init__(self, *args, **kwargs):
        super(ItemSelectForm, self).__init__(*args, **kwargs)
        self.fields['parent_category'].widget.attrs={'class': 'parent_category'}
        self.fields['sub_category'].widget.attrs={'class': 'sub_category'}
        self.fields['item'].widget.attrs={'class': 'item'}

它通過在static / suit / js / suit.js中添加以下行為我工作

加:

(function ($) {
    Suit.after_inline.register('init_select2', function(inline_prefix, row){
        $(row).find('select').select2(); 
    });

暫無
暫無

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

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