2010-02-16 27 views
8

Ben kendi formlarımda ForeignKeyRawIdWidget kullanma hakkında bazı belgeleri bulmaya çalışıyorum. Şu anda hata almaya devam, "init() hiçbir şey söyleyen en az 2 anahtar kelime olmayan argümanlar (1 verilir)" alır.Django: using ForeignKeyRawIdWidget admin formları dışında

Herhangi bir yardım en çok takdir edilecektir. Googling, küçük konuşmalar yapıyor ve nasıl uygulanacağını öğrenemem.

Güncelleştirme: Bu çözüldü; aşağıdaki çözümü gör.

+0

Widget'ı nasıl başlatmayı denediğinizi gösterebilir misiniz? –

+0

Eğer bunu kendi başınıza çözdüyseniz, lütfen çözümünüzü bir yanıt olarak gönderin ve bunu kabul edin. Sorunun çözümüne dahil olmak kafa karıştırıcıdır. – Cerin

+0

Daha iyi? İşaretçi için teşekkürler. – tufelkinder

cevap

6

Django 1.5'ten itibaren bu, ForeignKeyRawIdWidget öğesini yönetici olmayan formlarda yeniden kullanmak için çalışır.

from django.contrib.admin.sites import site 

class InvoiceForm(ModelForm): 
    class Meta: 
     model = Invoice 
     widgets = { 
      'customer': ForeignKeyRawIdWidget(Invoice._meta.get_field('customer').rel, site), 
     } 

Güncelleme

Django 2.0 field.remote_field lehine field.rel kaldırıyor. Bunun yerine kullanmak isteyebilirsiniz (Django 1.11 üzerinde de çalışır):

... 
ForeignKeyRawIdWidget(Invoice._meta.get_field('customer').remote_field, site), 
... 
+0

Django 2.0 'rel'de kullanımdan kaldırılmıştır (' RemovedInDjango20Warning: Field.rel kullanımı kullanımdan kaldırılmıştır. Use field.remote_field instead.'). Cevabı güncel tutmak için düzenlemek isteyebilirsiniz. – jorgeh

0

Bu kaynak kodu (django.contrib.admin.widgets) dan:

class ForeignKeyRawIdWidget(forms.TextInput): 
    """ 
    A Widget for displaying ForeignKeys in the "raw_id" interface rather than 
    in a <select> box. 
    """ 
    def __init__(self, rel, attrs=None): 
     self.rel = rel 
     super(ForeignKeyRawIdWidget, self).__init__(attrs) 

    #..... 

kalan kod, ben rel Modelinizin yabancı anahtar alanı olduğunu tahmin ediyorum. Bir noktada, kod self.rel.limit_choices_to'u denetler ve bu öznitelik (limit_choices_to) yalnızca ForgeinKey alanında ayarlanabilir.

+1

Bu kodu da inceledim ... Tam olarak örnek ya da umduğum belgeler değil! Ve hiçbir şey elde edemediğinizde sorun gidermeyi çok zorlaştırıyor. – tufelkinder