我正在使用django框架,并尝试创建一些费用跟踪应用程序作为练习
我有两个模型:类别和费用:
class Category(models.Model):
name = models.CharField(max_length=50)
class Expense(models.Model):
categories_list = Category.objects.order_by('name')
categories_tuples = ((x.name, x.name) for x in categories_list)
category = models.CharField(max_length=50, choices=categories_tuples)
add_date = models.DateField()
amount = models.DecimalField(max_digits=10, decimal_places=2)
我还得到了两个表格,用于添加新类别和新费用:
class ExpenseForm(ModelForm):
class Meta:
model = Expense
fields = ['category', 'add_date', 'amount']
class CategoryForm(ModelForm):
class Meta:
model = Category
fields = ['name']
我在不同的视图中使用这些表格:
def new_expense(request):
if request.method == "POST":
form = ExpenseForm(request.POST)
if form.is_valid():
expense = form.save(commit=False)
expense.save()
return redirect('index')
else:
form = ExpenseForm()
return render(request, 'expenses/new_expense.html', {'form': form})
def new_category(request):
if request.method == "POST":
form = CategoryForm(request.POST)
if form.is_valid():
expense = form.save(commit=False)
expense.save()
return redirect('index')
else:
form = CategoryForm()
return render(request, 'expenses/new_category.html', {'form': form})
因此,期望的行为是我可以添加具有指定名称的新类别,然后应该可以使用新类别数据库条目中的数据添加新费用
问题是在“新建类别”视图中添加新类别并切换到“新建费用”视图后,新添加的类别名称不会显示在“费用类别”字段的下拉列表中
但是,在关闭服务器并再次打开它之后,最近添加的类别在所提到的下拉列表中变为可用
我可以请你帮我找出问题出在哪里吗
在读了雨果的回信后,我做了一些挖掘,并提出了有效的解决方案:
我不确定这是不是最优雅的解决方法,但效果很好。如果有更好的解决方法,请告诉我:)
ForeignKey
由django.forms.ModelChoiceField
表示,这是一个ChoiceField,它的选择是一个模型查询集。摘自documentation你的
Expense Model
可能是这样的:相关问题 更多 >
编程相关推荐