0

モデルに、ユーザーがメールを受信するかどうかを示すフィールドがあります

receive_invites = models.BooleanField(default=True, help_text="Receive an invite email from friends")

オプション付きのビューもあります:

[ x ] メールを受け取りたくない...

デフォルトreceive_invites はTrueであるため、チェックボックスがオンになっています。ただし、 receive_invites をFalseに変更するには、ユーザーにチェックボックスをオンにしてもらいたいと思います。これを実現するために、ModelForm で次のことを行いました。誰かがこれを行うためのよりエレガントな方法を持っていますか?

class UnsubscribeForm(forms.ModelForm):        
    class Meta:
        model = Entrant
        fields = ('receive_invites')

    def __init__(self, *args, **kwargs):
        if kwargs.has_key('instance'):
            instance = kwargs['instance']
            if instance.receive_invites:
                instance.receive_invites = False
            else:
                instance.receive_invites = True
        super(UnsubscribeForm, self).__init__(*args, **kwargs)

そして、私はこれを持っています:

if request.method == 'POST':
    unsubscribe_form = UnsubscribeForm(request.POST, instance=me)

    if unsubscribe_form.is_valid():
        receive_invites = unsubscribe_form.cleaned_data['receive_invites']
        if receive_invites:
            user.receive_invites = False
        else:
            user.receive_invites = True
        unsubscribe_form.save()
        return redirect('index')
else:
    unsubscribe_form = UnsubscribeForm(instance=me)
4

3 に答える 3

0

ビューから「しない」という単語を削除してみませんか?

[x]メールを受け取りたい...

UnsubscribeFormそれ以外の場合は、からModelFormプレーンに変更することをお勧めしFormます。次に、トリックに頼ることなく、必要なすべてのブール値を反転できます。それはもっと手間がかかりますが、ラベルを変更するだけではうまくいきません。

于 2011-11-30T12:20:55.977 に答える
0

@DrTyrsaに加えて、フィールドの命名規則に従うためだけに多くの畳み込みを行うのは不合理です。そのフィールド名に関連付けられている場合は、データフィールドを目的の値にマップするプロパティをモデルにいつでも追加できます。

dont_receive_invites = models.BooleanField(default=False, help_text="Don't receive an invite email from friends")

@property
def receive_invites(self):
    return not self.dont_receive_invites
于 2011-12-04T09:37:54.067 に答える
0

モデルチェンジできないの?可能であれば、dont_receive_invites代わりにフィールドを作成して、多くの時間を節約してください。

于 2011-11-30T12:12:18.963 に答える