Có thể mở rộng Django ModelForm
bằng các trường bổ sung. Hãy tưởng tượng bạn có một mô hình tài khoản tùy chỉnh và ModelForm
này:
class ProfileForm(forms.ModelForm):
class Meta:
model = User
fields = ['username', 'country', 'website', 'biography']
Bây giờ, hãy tưởng tượng bạn muốn bao gồm trường bổ sung (không có mặt trong mô hình tài khoản của bạn, cho phép nói một hình ảnh avatar). Mở rộng hình thức của bạn bằng cách làm này:
from django import forms
class AvatarProfileForm(ProfileForm):
profile_avatar = forms.ImageField()
class Meta(ProfileForm.Meta):
fields = ProfileForm.Meta.fields + ('profile_avatar',)
Cuối cùng (cho rằng các hình thức có ImageField
), nhớ để bao gồm request.FILES
khi instantiating hình thức theo quan điểm của bạn:
# (view.py)
def edit_profile(request):
...
form = AvatarProfileForm(
request.POST or None,
request.FILES or None,
instance=request.user
)
...
Hy vọng nó giúp. Chúc may mắn!
EDIT:
Tôi đã nhận được một "chỉ có thể nối tuple (không phải là "danh sách") để tuple" lỗi trong AvatarProfileForm.Meta.fields thuộc tính. Thay đổi nó thành một tuple và nó đã làm việc.
Chúng phải được thêm vào dictionry clean_data. Vui lòng đăng mã mẫu của bạn để chúng tôi có thể xem xét. – gruszczy
Tôi khuyên bạn không nên lưu trữ thông tin trong trường Biểu mẫu. Giải pháp sạch hơn là: lưu trữ nó trong phiên. – sergzach
Nếu mã bạn đã đăng trong câu trả lời tiếp theo là bản sao và dán chính xác, thì có sự cố thụt dòng với dòng cuối cùng - nó phải là một cấp độ. –