Tôi chỉ mới đến Django được vài ngày. Bây giờ, tôi cần thay đổi cả giá trị và cách biểu thị trong một trường khi giá trị của các trường khác trong biểu mẫu tùy chỉnh thay đổi. Thay đổi MyModel tại thời điểm này làhạn chế.
ứng dụng của tôi/models.py:
lớp MyModel(models.Model):
somefield = models.IntegerField(default=0)
my-app/forms.py
lớp MyModelForm(models.Model):
someformfield = models.BooleanField(required=False)
// Ở đây nó phải là smth như sau:
// def clean(..), hoặc def save(..), hoặc def __init__(..)
nếu MyModelForm.is_valid():
# Cấu trúc if-else này sẽ 'tăng' sau mỗi lần thay đổi hộp kiểm 'someformfield':
nếu someformfield == Đúng:
trường nào đó=0
self.fields['somefield'].widget = Forms.HiddenInput()
khác:
somefield = data['somefield'] # Chỉ để sử dụng Đầu vào của người dùng
self.fields['somefield'].widget = Forms.ShownInput() # Có chuyện gì vậy, nhưng tôi chỉ cần hủy bỏ HiddenInput bằng cách nào đó - vậy nên làm thế nào?
Tôi đã thử xác định clean() như bên dưới, nhưng không làm được gì, thậm chí không tăng biểu mẫu.ValidationError:
def clean(MyModelForm, self):
clean_data = super(MyModelForm, self).clean()
nếu self.cleaned_data['someformfield']:
nếu self.cleaned_data['somefield'] != 0:
# Điều này không hiệu quả
nâng cao biểu mẫu.ValidationError(
"Lỗi!"
)
# Và theo dõi cũng không được
self.cleaned_data['somefield'] = 0
self.fields['somefield'].widget = Forms.HiddenInput()
Điều này cũng không hoạt động:
def clean(MyModelForm, self):
clean_data = super(MyModelForm, self).clean()
somefield = clean_data.get("somefield")
someformfield = clean_data.get("someformfield")
nếu trường nào đó:
#Cũng không hoạt động
nếu trường nào đó != 0:
nâng cao biểu mẫu.ValidationError(
"Lỗi!"
)
#Cũng không hoạt động
trường nào đó=0
self.fields['somefield'].widget = Forms.HiddenInput()
Có lẽ, tôi nên sử dụng một số phương pháp khác - save(..) hoặc khởi tạo(..), hoặc bất cứ điều gì, nhưng nó hoàn toàn bị nhầm lẫn trong tài liệu và không biết mục đích của từng phương pháp này là gì. Vậy tôi nên sử dụng phương pháp nào ở đây và làm thế nào?
lau dọn
Phương thức chỉ nên chấp nhận một tham số, tức là self
.
lớp MyModelForm(models.Model):
someformfield = models.BooleanField(required=False)
chắc chắn sạch (tự):
clean_data = self.cleaned_data
#làm công việc bạn muốn...
Tôi là một lập trình viên xuất sắc, rất giỏi!