我正在学习Django,遇到了挑战。我有一个模型,其中我想多次渲染特定字段,具体取决于用户要填充的数量,而其余模型字段保持不变。以下是示例模型。我想以这样的方式呈现模型形式:字段'building'
和'tour_date'
可以根据需要重复多次,而'client_name'
和'client_email'
保持相同。< / p>
我查看了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)
答案 0 :(得分:1)
执行此操作的最佳方法是根据应用程序使用ManytoMany关系或多对多关系,这将是一项艰巨的工作,但值得,请参见https://docs.djangoproject.com/en/3.0/topics/db/examples/many_to_many/
答案 1 :(得分:0)
我有一个模型,其中我想根据用户要填充的数量多次渲染特定字段,而其余模型字段保持不变。
这不是它的工作方式。数据库字段是原子的-它们仅包含一个值。如果需要不确定数量的值,请使用具有一对多(外键)或多对多关系的相关模型。 IOW,您需要一个“ TourDate”和“ Building”模型,两者在“ Tour”上均具有ForeignKey或ManyToMany关系。然后,您将能够为这些相关模型使用表单集。