多対多のセットの前方側への直接の代入は禁止されています。代わりにemails_for_help.set()を使用します。
2023-11-28 10:03:19
質問
私はDjangoの初心者ですが、この問題についての参考文献を見つけられませんでした。私はDjangoのモデルで多対多フィールドを使用すると、このエラーが発生します (
models.py
). 問題は、ビューで m2m フィールドを割り当てていることだと思います (
views.py
) で、フォーム (
forms.py
).
m2mフィールドをビューに割り当てるには?
(
Django version 2.0
,
python - 3.5
)
models.py
class User(AbstractUser):
username=models.CharField(max_length=20)
email = models.EmailField(_('email address'), unique=True)
class Setupuser(models.Model):
organization=models.CharField(max_length=200,blank=False,null=True)
emails_for_help = models.ManyToManyField(User)
views.py
class Set_user(FormView):
template_name="pkm_templates/set_up_user.html"
form_class = Set_User_Form
success_url = '/thanks/'
def form_valid(self, form):
org = form.cleaned_data.get('organization')
emails = form.cleaned_data.get("emails_for_help")
instance = Setupuser(organization=org,emails_for_help=emails)
instance.save()
return redirect("/")
forms.py
class Set_User_Form(ModelForm):
emails_for_help = forms.ModelMultipleChoiceField(
queryset=User.objects.all(),
widget=forms.CheckboxSelectMultiple
)
class Meta:
model = Setupuser
fields = ["organization","emails_for_help"]
どのように解決するのですか?
を取得する必要があります。
User
オブジェクトを取得し、それを
emails_for_help
フィールドに追加することができます。オブジェクトを
ManyToManyField
にオブジェクトを追加することはできません。を見てみてください。
doc
.
class Set_user(FormView):
template_name="pkm_templates/set_up_user.html"
form_class = Set_User_Form
success_url = '/thanks/'
def form_valid(self, form):
org = form.cleaned_data.get('organization')
emails = form.cleaned_data.get("share_email_with")
users = User.objects.filter(email__in=emails)
instance = Setupuser.objects.create(organization=org)
for user in users:
instance.emails_for_help.add(user)
return redirect("/")
別の方法として
.set()
.
class Set_user(FormView):
template_name="pkm_templates/set_up_user.html"
form_class = Set_User_Form
success_url = '/thanks/'
def form_valid(self, form):
org = form.cleaned_data.get('organization')
emails = form.cleaned_data.get("share_email_with")
users = User.objects.filter(email__in=emails)
instance = Setupuser.objects.create(organization=org)
instance.emails_for_help.set(users)
return redirect("/")
あるいは、単純に
.add()
を使って任意の数のオブジェクトを追加することもできます。
class Set_user(FormView):
template_name="pkm_templates/set_up_user.html"
form_class = Set_User_Form
success_url = '/thanks/'
def form_valid(self, form):
org = form.cleaned_data.get('organization')
emails = form.cleaned_data.get("share_email_with")
users = User.objects.filter(email__in=emails)
instance = Setupuser.objects.create(organization=org)
instance.emails_for_help.add(*users)
return redirect("/")
関連
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] Pythonの文字列書式をリストで使う
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] 異なる順序で同じ要素を持つ2つのJSONオブジェクトを等しく比較するには?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法