2016-04-26 90 views
0

我不明白爲什麼我一直收到這個錯誤:「選擇一個有效的選擇。」在Django中使用模型的錯誤

「選擇一個有效的選擇,該選擇不是可用的選擇之一。 錯誤消息屬於域 「帳戶」

這裏是我的模型:

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"] 

我的作品罰款,直到我嘗試提交與選擇的帳戶類型的這種形式。

+0

AddExpenseView上的'post'方法在哪裏? –

+0

對不起,我加了帖子的方法 – knusperwurst

回答

3

在您的發佈方法中,您忘記了將user傳遞給表單。由於您將account字段的查詢集設置爲Account.objects.filter(owner=self.user),這意味着您在驗證數據時顯示錶單時有不同​​的查詢集。

將其更改爲:

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

這可能是更好的改變形式:

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

然後當userkwargs丟失,你會得到一個明確的錯誤。

+0

這個伎倆,我現在真的很笨。謝謝! – knusperwurst

相關問題