簡體   English   中英

Django多對一操作

[英]Django many to one operations

我的模型中有兩個表,如下所示:

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”來訪問這兩個表。 我正在尋找的是一個新表,該表同時包含兩個表並給出如下所示(帶有示例): 在此處輸入圖像描述

我想要這樣做,以便執行以下功能:發布,刪除/ grade / {grade_value} / name / {name_value}

另外,獲取/ grade / {grade_value}

這樣我就可以獲得有關該研究生價值的所有學生的信息。

我知道我需要多對一使用,並且我也閱讀了文檔,嘗試了幾次,但沒有成功。 提前致謝。

設置屬性grade模型的Student作為ForeignKey的到模型Grade

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

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

這就是我要做的:

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')

按照慣例,類名應以大寫字母開頭。

參考文獻:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM