Saya memiliki proyek django dengan aplikasi django-allauth. Saya perlu mengumpulkan data tambahan dari pengguna saat mendaftar. Saya menemukan pertanyaan serupa di sini tetapi sayangnya, tidak ada yang menjawab bagian penyesuaian profil.
Sesuai dokumentasi yang disediakan untukdjango-allauth
:
ACCOUNT_SIGNUP_FORM_CLASS
(=None
)String yang menunjuk ke kelas formulir kustom (misalnya
‘myapp.forms.SignupForm’
) yang digunakan selama pendaftaran untuk meminta input tambahan dari pengguna (misalnya, pendaftaran buletin, tanggal lahir). Kelas ini harus mengimplementasikan sebuah‘save’
metode, menerima pengguna yang baru mendaftar sebagai satu-satunya parameter.
Saya baru mengenal Django dan sedang berjuang dengan ini. Dapatkah seseorang memberikan contoh kelas formulir kustom seperti itu? Apakah saya perlu menambahkan kelas model juga dengan tautan ke objek pengguna seperti ini ?
sumber
ACCOUNT_SIGNUP_FORM_CLASS
setelah masuk sosial pertama untuk mengumpulkan dan menyimpan bidang model pengguna khusus? Juga penggunaan model pengguna ubahsuaian olehAUTH_USER_MODEL
perubahan dari git: github.com/pennersr/django-allauth tidak diunggah di pypi.Menggunakan solusi yang disarankan oleh pennersr, saya mendapatkan DeprecationWarning:
Ini karena mulai versi 0.15 , metode penyimpanan sudah tidak digunakan lagi untuk mendukung metode pendaftaran def (permintaan, pengguna).
Jadi untuk mengatasi ini, kode contohnya harus seperti ini:
sumber
signup
sebagai penggantisave
.Inilah yang berhasil bagi saya dengan menggabungkan beberapa jawaban lain (tidak ada yang 100% lengkap dan KERING).
Masuk
yourapp/forms.py
:Dan di
settings.py
:Dengan cara ini menggunakan bentuk model sehingga KERING, dan menggunakan yang baru
def signup
. Saya mencoba meletakkan'myproject.myapp.forms.SignupForm'
tetapi itu entah bagaimana menghasilkan kesalahan.sumber
@ Shreyas: Solusi di bawah ini mungkin bukan yang terbersih, tetapi berhasil. Beri tahu saya jika Anda memiliki saran untuk membersihkannya lebih lanjut.
Untuk menambahkan informasi yang bukan milik profil pengguna default, pertama-tama buat model di yourapp / models.py. Bacalah dokumen umum django untuk mempelajarinya lebih lanjut, tetapi pada dasarnya:
Kemudian buat formulir di yourapp / forms.py:
sumber
Dalam
users/forms.py
Anda memasukkan:Di settings.py Anda meletakkan:
Dengan cara ini Anda tidak melanggar prinsip KERING dengan banyaknya definisi bidang model Pengguna.
sumber
Saya telah mencoba banyak tutorial berbeda dan semuanya kehilangan sesuatu, mengulangi kode yang tidak perlu atau melakukan hal-hal aneh, di bawah ini ikuti solusi saya yang menggabungkan semua opsi yang saya temukan, berfungsi, saya sudah memasukkannya ke dalam produksi TETAPI masih belum meyakinkan saya karena saya berharap untuk menerima first_name dan last_name di dalam fungsi yang saya lampirkan ke Pengguna buat untuk menghindari membuat profil di dalam formulir tetapi saya tidak bisa, langsung saja saya pikir itu akan membantu Anda.
Models.py
Forms.py
Settings.py
sumber
create_user_profile
sinyal Anda gagal sesuai desain. Kedua, Anda dapat mengurangi ini menjadi satu sinyal berdasarkancreated
, terutama saat berbicara KERING. Dan ketiga, Anda melakukan penyimpanan Profil dengan memanggil user.save () di tampilan Anda, lalu menyimpan profil itu lagi dengan data aktual.fields = [...]
dengan tanda kurung siku alih-alihfields = (...)
tanda kurung?exclude
.Hanya itu saja. (:
sumber
Buat Model Profil dengan pengguna sebagai OneToOneField
sumber