Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用外键向后获取django对象_Python_Django - Fatal编程技术网

Python 使用外键向后获取django对象

Python 使用外键向后获取django对象,python,django,Python,Django,我有3个使用Django框架的模型: class Student(models.Model): name = models.CharField() surname = models.CharField() class Group(models.Model): groupId = models.AutoField() name = models.CharField() students = models.ForeignKey(Student) class F

我有3个使用Django框架的模型:

class Student(models.Model):
    name = models.CharField()
    surname = models.CharField()
class Group(models.Model):
    groupId = models.AutoField()
    name = models.CharField()
    students = models.ForeignKey(Student)
class Faculty(models.Model):
    facultyId = models.AutoField()
    students = models.ForeignKey(Student)
我需要得到所有学生的名单,每个人都有学生小组和教员

class Student(models.Model):
     name = models.CharField()
     surname = models.CharField()
class Group(models.Model):
     groupId = models.AutoField()
     name = models.CharField()
     students = models.ForeignKey(Student, related_name="group")
class Faculty(models.Model):
    facultyId = models.AutoField()
    students = models.ForeignKey(Student, "related_name"="faculty")
您可以获取这个数据Student.objects.filter(group\u isnull=False,faculty\u isnull=False)

它将返回有教员和小组的学生

对于Json数据:

class Student(serializer.ModelSerializer):
    class Meta:
       model = Student
       fields = ('name', 'surname' , 'group', 'faculty')
您可以获取这个数据Student.objects.filter(group\u isnull=False,faculty\u isnull=False)

它将返回有教员和小组的学生

对于Json数据:

class Student(serializer.ModelSerializer):
    class Meta:
       model = Student
       fields = ('name', 'surname' , 'group', 'faculty')

首先,您需要修改模型关系。根据您当前的模型,每个教员和小组将有一名学生。 您可以将模型修改为:

class Group(models.Model):
    groupId = models.AutoField()
    name = models.CharField()

class Faculty(models.Model):
    facultyId = models.AutoField()

class Student(models.Model):
    name = models.CharField()
    surname = models.CharField()
    group = models.ForeignKey(Group)
    faculty = models.ForeighKey(Faculty)
然后,您可以使用
选择\u related
获取每个学生的小组和教员。 现在,您的查询将如下所示:

Students.objects.all().select_related('group', 'faculty')

首先,您需要修改模型关系。根据您当前的模型,每个教员和小组将有一名学生。 您可以将模型修改为:

class Group(models.Model):
    groupId = models.AutoField()
    name = models.CharField()

class Faculty(models.Model):
    facultyId = models.AutoField()

class Student(models.Model):
    name = models.CharField()
    surname = models.CharField()
    group = models.ForeignKey(Group)
    faculty = models.ForeighKey(Faculty)
然后,您可以使用
选择\u related
获取每个学生的小组和教员。 现在,您的查询将如下所示:

Students.objects.all().select_related('group', 'faculty')


试试这个
result=Student.objects.values('name'、'group\uu name'、'faculty\uuu facultyId')
是的,没关系,但是每个模型有20个字段,手动编写不太好,我想应该有一个自动方法来获取此数据。我想你应该使用
ModelSerializer
,你在创建框架还是普通的?我正在使用Django框架,没有任何更改。这个
result=Student.objects.values('name'、'group\uuuuu name'、'facultyId')
是的,没问题,但是我每个模型有20个字段,手动编写它不是很好,我想应该有一个自动方法来获取此数据我想你应该使用
ModelSerializer
,你是在创建框架还是正常?我在使用Django框架,没有任何更改这会返回Studets数据,如果没有关于组和教员的数据,您将获得学生对象列表,您可以从学生对象访问组和教员数据。例如,如果std1是一个学生对象。std1.group.all()将返回std1.faculty.all()是的,您是对的,但是我如何将此数据作为JsonResponse返回?您可以创建序列化程序。这将返回Studets数据,没有关于group和faculty的数据。您将获得student对象的列表,并且可以从student对象访问组和faculty数据。例如,如果std1是一个学生对象。std1.group.all()将返回,std1.faculty.all()是的,您是对的,但我如何将此数据作为JsonResponse返回?您可以创建序列化程序。好的,但如果我有一个产品模型,Translation和Variante,Translation和Variante具有产品的外键,如何获得产品列表?转换和变量模型的结构是什么?类变量(Models.Model):var_id=Models.AutoField()pro=Models.ForeignKey(Prodotto)var_ord=Models.IntegerField()var_nome=Models.CharField()var_cod=Models.CharField()var_price=Models.FloatField()类转换(models.Model):trad_id=models.AutoField()pro=models.ForeignKey(Product)lang_id=models.IntegerField()trad_title=models.CharField()trad_meta=models.TextField()trad_desc=models.CharField()从您的模型中,看起来一个转换实例链接到一个产品,这同样适用于方差模型。。。但是一个产品可以有多个Variante实例以及与其相关的翻译实例。这是理想的场景吗?在这种情况下,您的查询将是:
Product.objects.all().prefetch\u related('variante\u set'、'translation\u set'))
这将为您提供一个产品列表,其中包含每个产品项的相关
Variante
Translation
对象。您可以使用
item.Variante\u set.all()
item.Translation\u set.all()
确定相关的Variante和Translation对象,但如果我有产品型号,翻译和方差,翻译和方差对产品有外键,我怎样才能得到产品列表?翻译和方差模型的结构是什么?类方差(Models.Model):var_id=Models.AutoField()pro=Models.ForeignKey(Prodotto)var_ord=Models.IntegerField()var_nome=Models.CharField()var_cod=models.CharField()var_price=models.FloatField()类转换(models.Model):trad_id=models.AutoField()pro=models.ForeignKey(Product)lang_id=models.IntegerField()trad_title=models.CharField()trad_meta=models.TextField()trad_desc=models,看起来翻译的一个实例链接到单个产品,同样的情况也适用于方差模型。。。但是一个产品可以有多个Variante实例以及与其相关的翻译实例。这是理想的场景吗?在这种情况下,您的查询将是:
Product.objects.all().prefetch\u related('variante\u set'、'translation\u set'))
这将为您提供一个产品列表,其中包含每个产品项的相关
Variante
Translation
对象。您可以使用
item.Variante\u set.all()
item.Translation\u set.all()创建相关的Variante和Translation对象