2016-04-26 43 views
0

でのModelFormを使用してエラーが発生しました私は、私はこのエラーを取得保管理由を理解いけない:"有効な選択肢を選択してください。"ジャンゴ

「有効な選択項目を選択して選択が可能な選択肢の一つではないこと。。」 エラーメッセージがフィールド "アカウント" ここ

に属しているが、私のモデルです:

class Account(models.Model): 
    owner = models.ForeignKey(User, on_delete=models.CASCADE) 
    balance = models.FloatField() 
    name = models.CharField(max_length=50) 

    def __str__(self): 
     return self.name 


class Entry(models.Model): 
    account = models.ForeignKey("Account", on_delete=models.CASCADE) 
    amount = models.FloatField() 
    expense = models.BooleanField(default=True) 
    date = models.DateTimeField() 
    usage = models.CharField(max_length=200, blank=True) 
    payment_method = models.ForeignKey("PaymentMethod", on_delete=models.CASCADE) 
    category = models.ForeignKey("Category", on_delete=models.CASCADE) 

    def __str__(self): 
     return "{} - {}".format(self.date, self.account) 

マイビュー:

class AddExpenseView(View): 
    template_name = "finance/create_booking.html" 
    form_class = CreateBookingForm 

    @method_decorator(login_required) 
    def get(self, request): 
     context = { 
      "title": "StatYourLife - Neue Ausgabe", 
      "create_booking_form": self.form_class(user=request.user) 
     } 

     return render(request, self.template_name, context) 
    @method_decorator(login_required) 
    def post(self, request): 
     form = self.form_class(request.POST) 
     if form.is_valid(): 
      user_profile = UserProfile.objects.get(user_id=request.user) 
      booking = form.save(commit=False) 
      account = booking.account 
      account.balance -= booking.amount 
      booking.expense = True 
      booking.date = timezone.now() 
      user_profile.entrys += 1 
      user_profile.save() 
      account.save() 
      booking.save() 
      return HttpResponseRedirect(reverse("finance:index")) 
     else: 
      context = { 
       "title": "test", 
       "create_booking_form": form 
      } 
      return render(request, self.template_name, context) 

と私形式:

class CreateBookingForm(forms.ModelForm): 

    def __init__(self, *args, **kwargs): 
     self.user = kwargs.pop('user', None) 
     super(CreateBookingForm, self).__init__(*args, **kwargs) 
     self.fields["account"].queryset =  Account.objects.filter(owner=self.user) 

    class Meta: 
     model = Entry 
     exclude = ["expense", "date"] 

I作品私が選択した勘定科目タイプでこのフォームを提出しようとするまで

+0

AddExpenseViewの 'post'メソッドはどこにありますか? –

+0

申し訳ありません、私はポストメソッド – knusperwurst

答えて

3

投稿方法では、userをフォームに渡すことを忘れてしまいました。 accountフィールドのクエリーセットをAccount.objects.filter(owner=self.user)に設定しているため、データを検証するときにフォームを表示するときに別のクエリーセットがあることを意味します。それが

変更:userkwargsから欠落しているとき、あなたは明示的なエラーになるだろう

self.user = kwargs.pop('user') 

def post(self, request): 
    form = self.form_class(request.POST, user=self.request.user) 

それは良いかもしれないがにフォームを変更します。

+0

を追加しました。これはトリックでした、私は今本当にダム感じています。ありがとうございました! – knusperwurst

関連する問題