从其他模块看不到新添加的数据库条目

2024-03-29 13:39:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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})

因此,期望的行为是我可以添加具有指定名称的新类别,然后应该可以使用新类别数据库条目中的数据添加新费用

问题是在“新建类别”视图中添加新类别并切换到“新建费用”视图后,新添加的类别名称不会显示在“费用类别”字段的下拉列表中

但是,在关闭服务器并再次打开它之后,最近添加的类别在所提到的下拉列表中变为可用

我可以请你帮我找出问题出在哪里吗


Tags: nameformnewreturnifmodelsrequestsave
2条回答

在读了雨果的回信后,我做了一些挖掘,并提出了有效的解决方案:

class Category(models.Model):
    name = models.CharField(max_length=50)

    def __unicode__(self):
        return '%s' % self.name

class Expense(models.Model):
    category = models.ForeignKey(Category)
    add_date = models.DateField()
    amount = models.DecimalField(max_digits=10, decimal_places=2)

我不确定这是不是最优雅的解决方法,但效果很好。如果有更好的解决方法,请告诉我:)

ForeignKeydjango.forms.ModelChoiceField表示,这是一个ChoiceField,它的选择是一个模型查询集。摘自documentation

你的Expense Model可能是这样的:

class Expense(models.Model):
    category = models.ForeignKey(Category)
    add_date = models.DateField()
    amount = models.DecimalField(max_digits=10, decimal_places=2)

相关问题 更多 >