【发布时间】:2022-11-09 21:18:33
【问题描述】:
我正在为控制交易(费用、收入、预算)创建应用程序。我希望每个用户都能够创建自己的支出类别和自己的开支。用户创建的所有费用和类别仅对该用户可见。
如果用户 A 创建类别“Food123”,则用户 B 看不到它。他可以创建自己的此类类别。
我创建了两个模型 - 类别和费用。
class Category(models.Model):
name = models.CharField(max_length=100)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="category")
class Expense(models.Model):
name = models.CharField(max_length=100)
amount = models.DecimalField(max_digits=8, decimal_places=2)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
date = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="expense")
在创建费用和类别时,我使用通用视图。
class ExpenseListView(LoginRequiredMixin, ListView):
model = Expense
context_object_name = 'expense'
template_name = 'expense/expense_list.html'
def get_queryset(self):
return self.request.user.expense.all()
class ExpenseCreateView(CreateView):
model = Expense
success_url = '/record/expense'
form_class = ExpenseForm
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save()
return HttpResponseRedirect(self.get_success_url())
class CategoryCreateView(CreateView):
model = Category
success_url = '/record/expense'
form_class = CategoryForm
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save()
return HttpResponseRedirect(self.get_success_url())
更重要的是,我使用了 forms.py。
class ExpenseForm(forms.ModelForm):
class Meta:
model = Expense
fields = ('name', 'amount', 'category')
class CategoryForm(forms.ModelForm):
class Meta:
model = Category
fields = ('name',)
不幸的是,当用户 A 创建类别“IT”时,它会自动转到用户 B。当用户 B 创建他的费用时,他也会看到 A 创建的这个“IT”类别,而不是 B。
如何将表单中类别的显示限制为仅由特定用户创建的类别?
【问题讨论】:
标签: python django database forms relation