【问题标题】:How can i get make a table model work efficiently?我怎样才能使表格模型有效地工作?
【发布时间】:2020-06-02 11:50:42
【问题描述】:

所以,我正在制作一个用于制作时间表的应用程序。我遇到了一个问题。 我有两个模型。时间表和内容。

class Timetable(models.Model):

title=models.CharField(max_length=50)
start_time=models.TimeField(default="8:0")
end_time=models.TimeField(default="4:0")
entries=models.IntegerField(default=3)
theme=models.ForeignKey(Theme,on_delete=models.CASCADE,null=True)
def __str__(self):
    return self.title

def get_absoulte_url(self):
    return reverse('timetable-detail',args=[str(self.id)])

class CellEntry(models.Model):

parent_table=models.ForeignKey(Timetable,on_delete=models.CASCADE)
content=models.CharField(max_length=30)

def __str__(self):
    return self.content

如何制作一个表格,使我可以让这两个模型在 Excel 中表现得像一个表格?如何在一个视图中将多个 cellentry 的 parent_table 属性的值设置为相同的值?

【问题讨论】:

  • django formset 可以帮到你

标签: python django web


【解决方案1】:

所以,这里你想要的是带有 cellEntry 的表单作为具有多个子时间表的父级。

【讨论】:

  • 我希望时间表有多个 cellentry 孩子
  • 获取 cellEntry 作为时间表模型中的外键,并为 cellEntry 使用 model_formset 工厂。您可以查看 django 文档以了解 model_formset 工厂。我添加了一个示例代码,以便您了解一些想法。如果您有任何问题,请随时提出。
【解决方案2】:

这里是一个示例代码。猜猜你可以从这里得到一些想法。

def content_add_view(request):

LectureFormset = modelformset_factory(Lecture, fields=('lecture_title', 'lecture_content', 'youtube_url'))

# if the request is post and the form is valid than save the form
if request.method == 'POST':
    content_add_form = ContentAddForm(request.POST or None, request.FILES or None)
    formset = LectureFormset(request.POST or None, request.FILES or None)

    if content_add_form.is_valid():
        course = content_add_form.save(commit=False)
        course.user = request.user
        course.save()

        # looping through the formset as we need multiple fields saving it in same form. here we get the data and than save it 
        if formset.is_valid():
            for f in formset:
                try:
                    video = Lecture(course=course, lecture_title=f.cleaned_data.get('lecture_title'), lecture_content=f.cleaned_data.get('lecture_content'), youtube_url=f.cleaned_data.get('youtube_url'))
                    video.save()

                except Exception as e:
                    break
            return redirect('teacher-profile')
        else:
            print('formsset is invalid')

else:
    content_add_form = ContentAddForm()
    formset = LectureFormset(queryset=Lecture.objects.none())

context = {

    'contentForm': content_add_form,
    'formset': formset,
}

return render(request, 'apps/contentAdd.html', context)

【讨论】:

    猜你喜欢
    • 2014-11-03
    • 1970-01-01
    • 2018-09-03
    • 2018-01-21
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多