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}"
注:
- 不要调用外键
,因为它不是指Django ORM中的id而是指对象本身:Department\u 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
更容易阅读。同样在代码中,您必须自己生成ID,因为您没有将它们设置为自动填充department.department\u id