Django 如何将一个模型a的a字段调用到另一个模型B中,以便B可以用作视图

Django 如何将一个模型a的a字段调用到另一个模型B中,以便B可以用作视图,django,django-models,Django,Django Models,我创建了一个名为“部门,课程”的模型。模型如下 这是部门和课程的模式 class Departments(models.Model): Department_Id = models.IntegerField(primary_key=True) Department_Name = models.CharField(max_length=200) Department_Code = models.CharField(max_length=200) class Course(

我创建了一个名为“部门,课程”的模型。模型如下

这是部门和课程的模式

class Departments(models.Model):
    Department_Id = models.IntegerField(primary_key=True)
    Department_Name = models.CharField(max_length=200)
    Department_Code = models.CharField(max_length=200)

class Course(models.Model):
    Course_Id = models.IntegerField(primary_key=True)
    Department_Id = models.ForeignKey(Departments, on_delete=models.CASCADE)
    Course_Name = models.CharField(max_length=200)
    Course_Code = models.CharField(max_length=200)
我想创建一个名为view的模型,稍后可以调用该模型进行搜索。我想要一个视图模型,它由concat格式的数据组成,即name=Department\u name+Course\u name

class View (models.model):
       view_id=  models.IntegerField(primary_key=True)
        Name=  Department_name(I want this from Departments table) 
        +  Course_Name(I want this from Course table) 

我尝试使用一对一关系。我非常感谢您的帮助

不清楚您为什么要这样做。将数据从一个模型复制到另一个模型从来都不是一个好主意,因为这可能导致不一致

您可以在视图中将ForeignKey添加到
课程
模型中,然后在执行
f“{View.Course.name}{View.Course.department.name}”操作时
您已经拥有了字符串:

class View(models.Model):
    course = models.ForeignKey(Course, on_delete=models.CASCADE)

    def name(self):
        return f"{self.course.name} {self.course.department.name}"
注:

  • 不要调用外键
    Department\u id
    ,因为它不是指Django ORM中的id而是指对象本身:
    Department=models.ForeignKey(Department,on\u delete=models.CASCADE)
    。如您所见,这使得阅读代码变得更加简单:
    self.course.Department\u id
    是一个
    Department
    对象,而不是一个整数,因此
    self.course.Department
    更有意义
  • 不要在字段名前面加上类前缀,这只会使代码的可读性大大降低:您更喜欢
    department.name
    还是
    department.department\u name
  • 视图
    模型对我来说仍然是个谜,因为你可以在没有它的情况下进行搜索。例如,您可以搜索具有匹配部门名称的课程,如下所示:

    Course.objects.filter(department__name__icontains="maths")
    
    它将返回所有在其系名中带有“数学”的课程

  • 从模型中删除所有id,Django会自动创建这些id(称为
    id
    )。同样,
    department.id
    department.department\u id
    更容易阅读。同样在代码中,您必须自己生成ID,因为您没有将它们设置为自动填充