1

私はこのようなモデルを持っています:

class GuestStatus(models.Model):
    guest_status = models.CharField(max_length=200)
    arrangement = models.IntegerField(unique=True, help_text="Start from 1. Guest status will be arranged alphabetically.")


class Guest(models.Model):
    user = models.ForeignKey(User)
    full_name = models.CharField(max_length=250)
    status = models.ManyToManyField(GuestStatus, blank=True, null=True)
    invitation_date = models.DateTimeField(blank=True, null=True)

チェックボックスとして表示したいManyToManyField。それが私がこのようにしている理由です:

class GuestForm(ModelForm):
    status = forms.ModelMultipleChoiceField(queryset=GuestStatus.objects.all().order_by('arrangement'), widget=forms.CheckboxSelectMultiple, required=False)
    class Meta:
        model = Guest
        exclude = ['user', 'invitation_date']

私はこのようなフォームを保存しようとしています:

    form = GuestForm(request.POST)
    if form.is_valid():
        status = form.cleaned_data['status']
        guest.status = status
        if status:
            invitation_date = datetime.now() 
        else:
            invitation_date = None
        new_guest = form.save(commit=False)

        new_guest.user = request.user
        new_guest.save()
        new_guest.status = status
        form.save_m2m()

        return HttpResponseRedirect('/list_guests/')

フォームはすべてのデータを保存していますが、status値は保存していません。なにが問題ですか?また、保存に成功した後、テンプレートのステータス値にアクセスするにはどうすればよいですか? ありがとう

4

1 に答える 1

0

私は次のようにします:

form = GuestForm(request.POST)
if form.is_valid():
    if status:
        invitation_date = datetime.now() 
    else:
        invitation_date = None

    new_guest = form.save(commit=False)
    new_guest.user = request.user
    new_guest.save()

    status = form.cleaned_data['status']
    for stat in status:
        new_guest.status_set.create(guest_status = stat['guest_status'], arrangement = stat['arrangement'])

    return HttpResponseRedirect('/list_guests/')

インスタンスを取得したら、new_guestインスタンスを作成GuestStatusして にバインドしますnew_guest

または、GuestStatusあなたができる辞書である場合:

    for stat in status:
        gs = GuestStatus.objects.get(pk = stat['guest_status'])
        new_guest.status_set.add(gs)

あなたが私と私の英語を理解してくれることを願っています:)

于 2013-10-28T09:13:27.513 に答える