Django多对一操作

时间:2019-02-07 05:00:53

标签: python django

我的模型中有两个表,如下所示:

class grade(models.Model):
    # Class of student
    grade = models.CharField(max_length=255, null=True, unique = True)

class student(models.Model):
    name = models.CharField(max_length=255) 
    grade = models.CharField(max_length=255)
    rollno = models.BigIntegerField()

可以看出,两个表中的等级都是相同的。 我可以分别使用第一个表的URL“ / grade”和第二个表的“ / name”来访问这两个表。 我正在寻找的是一个新表,该表同时包含两个表并给出以下内容(带有示例): enter image description here

我想要这样做,以便可以执行以下功能: 发布,删除/ grade / {grade_value} / name / {name_value}

另外, 获取/ grade / {grade_value}

这样我就可以获得所有具有那个Grad值的学生的信息。

我知道我需要多对一使用,并且我也阅读了文档,尝试了几次,但是没有成功。 预先感谢。

2 个答案:

答案 0 :(得分:0)

将模型grade的属性Student设置为模型Grade的{​​{3}}。

class Grade(models.Model):
    grade = models.IntegerField()

class Student(models.Model):
    name = models.CharField(max_length=255) 
    grade = models.ForeignKey(Grade)
    rollno = models.BigIntegerField()

答案 1 :(得分:0)

这就是我要做的:

models.py:

class Grade(models.Model):
    grade = models.CharField(max_length=255, primary_key=True)

class Student(models.Model):
    name = models.CharField(max_length=255) 
    grade = models.ForeignKey(grade, on_delete=models.CASCADE)
    rollno = models.BigIntegerField()

class Third(models.Model):
    grade = models.OneToOneField(grade, on_delete=models.CASCADE, primary_key=True)
    stds = models.TextField()

views.py:

from django.forms.models import model_to_dict

def serialize(students):
    s_list = []
    fields = ['name', 'grade', 'rollno']
    for student in students:
        s_list.append(model_to_dict(student, fields=fields))
    return s_list

def index(request):         
    g1 = Grade.objects.get(grade='9')
    g2 = Grade.objects.get(grade='10')
    students = Student.objects.filter(grade=g1) 
    Third.objects.create(grade=g1, stds=serialize(students))
    students = Student.objects.filter(grade=g2) 
    Third.objects.create(grade=g2, stds=serialize(students))    
    return render(request, 'index.html')

按照惯例,类名应以大写字母开头。

参考文献: