2009-12-23 27 views
6

Xin chào, tôi có một mô hình có từ 2 đến nhiều trường trong đó. một là một lĩnh vực m2m tiêu chuẩn mà không sử dụng bất kỳ thông qua các bảng trong khi khác là một chút complecated hơn và có một bảng thông qua. Tôi đang sử dụng biểu mẫu Django forms.modelform để hiển thị và lưu các biểu mẫu. Mã tôi phải lưu mẫu làCác hình thức Django save_m2m

if form.is_valid(): 
     f = form.save(commit=False) 
     f.modified_by = request.user 
     f.save() 
     form.save_m2m() 

Khi tôi cố gắng để lưu các hình thức tôi nhận được lỗi sau:

Không thể thiết lập giá trị trên một ManyToManyField trong đó xác định một mô hình trung gian.

Tôi biết điều này đang xảy ra khi tôi thực hiện form.save_m2m() vì bảng thông qua. Những gì tôi muốn nói dối để làm là nói với Django bỏ qua lĩnh vực m2m với bảng thông qua nhưng vẫn lưu lĩnh vực m2m mà không thông qua bảng. Sau đó tôi có thể tiếp tục lưu dữ liệu theo cách thủ công cho trường bảng thông qua.

Cảm ơn

Trả lời

0

bạn không thể lưu các m2m "mà không có bảng thông qua"

các dữ liệu mà bạn muốn lưu được lưu trữ trong bảng qua (và duy nhất trong bảng thông qua)

4

Nếu bạn có một mô hình với nhiều trường một được thực hiện với một bảng thông qua và một trong những khác là một thường xuyên nhiều-nhiều quan hệ mà không có thông qua một bảng. Bạn vẫn có thể sử dụng save_m2m() để lưu thông thường. Chỉ cần thêm các trường thông qua vào danh sách loại trừ của bạn trên biểu mẫu của bạn.

Thêm bên trong lớp biểu mẫu của bạn:

class Meta: 
    model = YourModel 
    exclude = ('m2mthroughfield',) 
Các vấn đề liên quan