Tôi cần đặt giá trị trường, không được truyền cho hàm tạo của Django Form.Đặt giá trị trường theo phương thức clean() Django Form, nếu trường này không được truyền trong hàm tạo
tôi có mô hình và hình thức như thế này:
class Message(models.Model):
created = models.DateTimeField()
text = models.CharField(max_length=200, blank=True, null=True)
active = models.BooleanField(default=False)
class MessageForm(forms.ModelForm):
class Meta:
model = Message
exclude = ('created', 'active')
def clean(self):
# check if user is blocked
if user.is_admin():
self.cleaned_data['active'] = True
return self.cleaned_data
Dự kiến : nếu người dùng hiện nay là admin - Tôi không cần tự động thiết lập thông điệp như hoạt động. Người dùng không được chuyển thông số này theo biểu mẫu.
Thực tế: Tôi thấy thông báo đã lưu luôn có cờ "Sai" (Tôi có thể xóa điều kiện và trong trường hợp này tôi cũng thấy thông báo đó không hoạt động).
Hãy giúp tôi hiểu, làm cách nào tôi có thể đặt phương thức "hoạt động" này ở clean().
Làm thế nào và nơi nào "người dùng" biến được thiết lập? –
Tôi làm ví dụ này. Bạn có thể xóa tình trạng này hoặc thay thế mọi thứ khác. Tôi đã đặt self.cleaned_data ['active'] = True nhưng tôi cũng cần nói với Django Form rằng trường này được sử dụng và cần thiết lập giá trị này cho đối tượng trước khi lưu. Tôi có thể làm điều này với tham số "ban đầu" cho đối tượng Form, nhưng tôi không thể làm điều này im trường hợp của tôi. Tôi cần nói với Django Form rằng tôi đã sử dụng "hoạt động" lĩnh vực, nhưng tôi không biết làm thế nào để làm điều này vào một phương pháp hình thức sạch(). –