以Django模型形式多次呈现特定字段

2024-03-29 13:55:05 发布

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

我正在学习django,遇到了一个挑战。我有一个模型,在这个模型中,我希望根据用户希望填充的内容多次渲染特定字段,而其余的模型字段保持不变。下面是一个示例模型。我希望以这样的方式呈现模型表单:'building''tour_date'字段可以根据需要重复多次,而'client_name''client_email'字段保持不变

我查看了inlineformset_factory,但我认为它需要一个父模型。我不认为它符合我的目的,尽管我希望它有一些特性,比如'extra''can_delete'。保存的记录必须保存为'Tour'表中的新行

我在下面的例子中面临的另一个挑战是“building”字段必须是下拉列表。我提供了下面的forms.py供参考

如何在Django 3.0中以相同的形式编写视图并多次呈现'building''tour_date'两个字段?请求一些帮助和指导

models.py:

class Tour(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField(max_length=100)
building = models.CharField(max_length=255)
tour_date = models.DateField()
...

class Meta:
    managed = True
    unique_together = ('name', 'building')

forms.py:

class TourForm(forms.ModelForm):
    building = forms.ModelChoiceField(
        widget=forms.Select,
        queryset=Country.objects.filter(city='ABC'),
        required=True
    )

    class Meta:
        model = Tour
        fields = ['name', 'email', 'building','tour_date']

views.py:

def add_tours(request):
    if request.method == 'POST':
        form = TourForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('tours-browse')
    else:
        form = TourForm()
    template = 'data/tours_add.html'
    context = {'form': form}
    return render(request, template, context)

Tags: namepy模型formdatemodelsemailrequest
2条回答

I have a model in which I want to render specific fields multiple times depending on how much the user wants to fill in, while rest of the model fields remain the same.

这不是它的工作原理。数据库字段是原子的-它们只包含一个值。如果需要不确定数量的值,可以使用具有一对多(外键)或多对多关系的相关模型。你想要一个“旅游日期”和一个“建筑”模型,在“旅游”中既有外键也有很多关系。然后,您将能够为这些相关模型使用表单集

实现这一点的最佳方法是根据您的应用程序使用ManytoMany关系或manytoone,这将是非常多的工作,但它是值得的,请参阅https://docs.djangoproject.com/en/3.0/topics/db/examples/many_to_many/的更多信息

相关问题 更多 >