首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何管理django中模型之间的关系

如何管理django中模型之间的关系
EN

Stack Overflow用户
提问于 2019-04-19 04:53:49
回答 1查看 51关注 0票数 0

我想要建立一个系统,当学生选择某门课程时,只有在为student.In添加价格和持续时间时,只应动态显示所选课程的价格和持续时间--我想要为所选课程生成动态价格和持续时间的添加学生表单-- .How可以实现这一目标吗?

models.py

代码语言:javascript
复制
class Course(models.Model):
    title = models.CharField(max_length=250)
    slug = AutoSlugField(populate_from='title')
    basic_price = models.CharField(max_length=50)
    advanced_price = models.CharField(max_length=50)
    basic_duration = models.CharField(max_length=100)
    advanced_duration = models.CharField(max_length=100)

    def __str__(self):
        return self.title

    class Meta:
        verbose_name_plural = 'Add Courses Details'


class Student(models.Model):
    name = models.CharField(max_length=200)
    slug = AutoSlugField(populate_from='name')
    phone = models.CharField(max_length=50)
    email = models.EmailField()
    address = models.CharField(max_length=200)
    course = models.ManyToManyField(Course)
    # i want price and duration generated dynamically linked to that selected course while adding through form 

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = 'Add Student Details'

forms.py

代码语言:javascript
复制
    class AddStudentForm(forms.ModelForm):
    class Meta:
        model = Student
        fields = '__all__'


class AddCourseForm(forms.ModelForm):
    class Meta:
        model = Course
        fields = '__all__'

views.py

代码语言:javascript
复制
def addstudent(request):
    if request.method == 'POST':
        form = AddStudentForm(request.POST)
        if form.is_valid():
            student = form.save(commit=False)
            student.save()
            student.course.set() # i am getting error here also
            return redirect('/student/view/student/')
    else:
        form = AddStudentForm()
    return render(request,'student/add_student.html',{'form':form})

def addcourse(request):
    if request.method == 'POST':
        form = AddCourseForm(request.POST)
        if form.is_valid():
            course = form.save(commit=False)
            course.save()
            return redirect('/course/view/course/')
    else:
        form = AddCourseForm()
    return render(request, 'student/add_course.html', {'form': form})

add_student.html

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
                   <form action="" method="post" >
                        {% csrf_token %}
                     {{ form.as_p }}
                        <input type="submit" class="btn btn-success text-center w-100 mb-3" value="Add">
                    </form>
</body>
</html>

add_course.html也是相同的

EN

回答 1

Stack Overflow用户

发布于 2019-04-19 05:00:43

您需要添加的是多到多领域 -学生可以在多个课程中,一个课程可以包括多个学生。

它的显示和计算方式取决于您的视图。

更新:

好吧,我没好好看过你的模特。关于如何显示的问题在没有代码的情况下是相当广泛的,但要点是:

  • 您真的需要将工期和价格保存为CharField吗?将它们作为普通的IntegerFieldFloatField是很容易的,因为它们基本上是数字。
  • 对于价格和持续时间这样简单的事情,您有太多的ForeignKey。这些字段应该保存为普通的IntegerField/FloatField,或者从链接的课程列表中动态生成。
  • 您可以参考聚合的所有学生课程,如下所示:
代码语言:javascript
复制
# Get student instance
student = Student.objects.get(pk=1)

# Get all courses for that student
courses = student.courses.all()

# Get sum of basic_price for all of that courses
sum_price = courses.aggregate(Sum('basic_price'))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55756783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档