【问题标题】:how to access all fields of other models with the help of Forign Key in django如何在django中借助外键访问其他模型的所有字段
【发布时间】:2019-03-14 11:46:12
【问题描述】:

我想招收学生,想从学生模型中获取学生信息,从课程模型中获取课程信息。 学生和课程是独立的应用程序。 我如何在注册视图中获取学生姓名列表和课程列表

这是代码

课程模型

class course(models.Model):
    course_name = models.CharField(max_length=30)
    course_fee = models.IntegerField(default=3000)
    cr_hrs = models.IntegerField(default=2)

    def __str__(self):
        return self.course_name

学生模型

class student(models.Model):
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=20)
    father_name = models.CharField(max_length=30)
    dob = models.DateField()
    image = models.ImageField(upload_to='images/', null=True)
    phone_number = models.BigIntegerField()
    email = models.EmailField(unique=True, null=True)


    def __str__(self):
        return self.first_name

注册模特

from course.models import course
from student.models import student
class enroll(models.Model):
    student = models.ForeignKey(student, on_delete=models.CASCADE)
    course = models.ManyToManyField(course)
    enroll_date = models.DateField()
    enrolled_by = models.ForeignKey(User, on_delete=models.CASCADE)
    fee_paid = models.BooleanField(default=False)

注册视图

def create(request):
    enrolled = enroll.objects
    if request.method == 'POST':
        if request.POST['student'] and request.POST['course']:
            enrolled = enroll()
            enrolled.student = request.POST['student']
            enrolled.course = request.POST['course']
            enrolled.enrolled_by = request.user
            enrolled.save()
            return redirect('/enroll/list')

        else:

            return render(request, 'enroll/create.html', {'error': 'All fields are requried.'})
    else:

        return render(request, 'enroll/create.html', {'enrolled':enrolled})

html 文件

<form class="needs-validation" novalidate method="POST" action="{% url 'enroll_create' %}" enctype="multipart/form-data" name="student_form">
      {% csrf_token %}
       <select class="form-control" name="student">
         {% for enroll in enrolled.all %}
          <option value="{{enroll.student.first_name}}" >{{enroll.student.first_name}} {{enroll.student.last_name}}</option>
          {% endfor%}
        </select>
        <select class="form-control" name="course" >
          {% for enroll in enrolled.all %
           <option value="{{enroll.course.course_name}}" >{{enroll.course.course_name}}</option>
           {% endfor%}
         </select>
         <button class="btn btn-primary btn-lg btn-block" type="submit">Register</button>
     </form>

我在名单中只有第一个名字,在课程中什么也没有

【问题讨论】:

  • 哇,您的项目看起来很棒,但很抱歉我无法配置问题。希望您能尽快得到帮助。
  • @FarrukhSarmad 谢谢:)

标签: django django-models django-templates


【解决方案1】:
def create(request):
    enrolled = enroll.objects
    if request.method == 'POST':
        if request.POST['student'] and request.POST['course']:
            enrolled = enroll()
            enrolled.student = request.POST['student']
            course = Course.objects.get(id=int(request.POST['student']))
            enrolled.course.add(course)
            enrolled.enrolled_by = request.user
            enrolled.save()
            return redirect('/enroll/list')

        else:

            return render(request, 'enroll/create.html', {'error': 'All fields are requried.'})
    else:

        return render(request, 'enroll/create.html', {'enrolled':enrolled})

【讨论】:

  • 感谢您的回复。这将对我有所帮助,但我如何才能获得所有学生的名单。从上面的方法我只得到了学生数据库的第一个名字
  • @AhmedAftab 能不能发一下 url '/enroll/list'的视图
  • @login_required(login_url="/accounts/login") def list(request): enrolled = enroll.objects return render(request, 'enroll/list.html', {'enrolled': enrolled})
猜你喜欢
  • 2020-11-29
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 2012-06-09
  • 2018-03-28
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
相关资源
最近更新 更多