2010-02-16 43 views
8

Tôi đang cố gắng tìm một số tài liệu về cách sử dụng ForeignKeyRawIdWidget trong biểu mẫu của riêng tôi. Hiện tại, tôi vẫn gặp phải lỗi "init() có ít nhất 2 đối số không phải từ khóa (1 đã cho)", điều đó không cho tôi biết gì.Django: sử dụng ForeignKeyRawIdWidget bên ngoài biểu mẫu quản trị

Mọi trợ giúp sẽ được đánh giá cao nhất. Googling này biến lên ít nhưng các cuộc hội thoại dev và không có ví dụ mà tôi có thể tìm thấy làm thế nào để thực hiện nó.

Cập nhật: Điều này được giải quyết; xem giải pháp bên dưới.

+0

Bạn có thể chỉ cho bạn cách khởi chạy tiện ích con không? –

+0

Nếu bạn tự giải quyết vấn đề này, vui lòng đăng giải pháp của bạn làm câu trả lời và chấp nhận điều đó. Bao gồm các giải pháp trong câu hỏi là khó hiểu. – Cerin

+0

Tốt hơn? Cảm ơn con trỏ. – tufelkinder

Trả lời

6

Kể từ Django 1.5, công trình này sử dụng lại ForeignKeyRawIdWidget ở dạng không phải quản trị viên.

from django.contrib.admin.sites import site 

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

Cập nhật

Django 2.0 được ti field.rel ủng hộ field.remote_field. Bạn có thể muốn sử dụng tùy chọn này (cũng hoạt động trên Django 1.11):

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

Trong Django 2.0 'rel' đã không được chấp nhận (' RemovedInDjango20Warning: Việc sử dụng field.rel đã không được chấp nhận. Sử dụng field.remote_field thay thế.'). Bạn có thể muốn chỉnh sửa câu trả lời để cập nhật câu trả lời. – jorgeh

0

Đây là từ mã nguồn (django.contrib.admin.widgets):

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) 

    #..... 

Từ mã còn lại, tôi sẽ đoán rằng rel là lĩnh vực trọng điểm nước ngoài của mô hình của bạn. Tại một thời điểm, mã kiểm tra self.rel.limit_choices_to và thuộc tính này (limit_choices_to) chỉ có thể được đặt trên trường ForgeinKey.

+1

Tôi cũng đã xem xét mã này ... Không chính xác ví dụ hoặc tài liệu mà tôi đã hy vọng! Và nó làm cho nó rất khó khăn để khắc phục sự cố khi bạn không nhận được bất cứ điều gì cả. – tufelkinder

Các vấn đề liên quan