Python 连接Django中的3个模型以访问其他模型数据
我有3个模型,在第3个名为Bookauth的模型中,包含了其他两个模型的外键图书,Authors。我想从某个作者的“书”中获取所有字段(考虑到他写了不止一本书)。我在模型中使用了manager,但失败了 型号Python 连接Django中的3个模型以访问其他模型数据,python,django,django-models,Python,Django,Django Models,我有3个模型,在第3个名为Bookauth的模型中,包含了其他两个模型的外键图书,Authors。我想从某个作者的“书”中获取所有字段(考虑到他写了不止一本书)。我在模型中使用了manager,但失败了 型号 class Authors(models.Model): aid = models.AutoField(primary_key=True) aname = models.CharField(max_length=200, blank=True, null=True)
class Authors(models.Model):
aid = models.AutoField(primary_key=True)
aname = models.CharField(max_length=200, blank=True, null=True)
adescription = models.TextField( blank=True, null=True)
def __str__(self):
return self.aname
class Books(models.Model):
bid = models.BigIntegerField(primary_key=True)
bname = models.CharField(max_length=200, blank=True, null=True)
bdescription = models.TextField(blank=True, null=True)
def __str__(self):
return self.bname
class Bookauth(models.Model):
bid = models.ForeignKey(Books, on_delete=models.DO_NOTHING, db_column='bid', blank=True, null=True)
aid = models.ForeignKey(Authors, on_delete=models.DO_NOTHING, db_column='aid', blank=True, null=True)
观点不要认为这是相关的
def getObject(request):
all_books = Books.objects.all()
html = serializers.serialize('json', all_books)
return HttpResponse(html)
#data = serializers.serialize("json", Books.objects.all())
#return HttpResponse(data, mimetype='application/json')
def getAuth(request):
all_auth = Authors.objects.all()
htm = serializers.serialize('json', all_auth)
return HttpResponse(htm)
def bookAuth(request):
all_keys = Bookauth.objects.all()
key_serial = serializers.serialize('json', all_keys)
return HttpResponse(key_serial)
def book_search(request):
b = request.GET.get('book', '')
book = Books.objects.filter(pk = b)
return HttpResponse(book)
def author_search(request):
x = request.GET.get('author', '')
auth = Authors.objects.filter(pk= x)
return HttpResponse(auth)
关于我能做什么有什么建议吗?考虑到您在作者或书籍模型上使用了许多关系的中间表
对于进一步查询ORM示例也很有用,因为您正在使用中间表来处理作者或书籍模型上的许多关系 对于进一步查询ORM示例也很有用,例如:
class Author(models.Model):
aid = models.AutoField(primary_key=True)
aname = models.CharField(max_length=200, blank=True, null=True)
adescription = models.TextField( blank=True, null=True)
books = models.ManyToManyField(Books)
def __str__(self):
return self.aname
大概是这样的:
class Author(models.Model):
aid = models.AutoField(primary_key=True)
aname = models.CharField(max_length=200, blank=True, null=True)
adescription = models.TextField( blank=True, null=True)
books = models.ManyToManyField(Books)
def __str__(self):
return self.aname
您应该使用多对多字段,而不是显式定义Bookauth。@DanielRoseman我能举一个例子说明这将如何在我的模型上工作吗?如中所述,我想通过他编写的所有bookid获取作者id。您应该使用多对多字段,而不是显式定义Bookauth。@DanielRoseman我能举个例子说明这在我的模型上是如何工作的吗?正如在中一样,我想用他编写的所有bookid获取作者id。
def authbook(请求):#p=request.get.get('aid','')bo=Authors.objects.all()l=[]对于bo中的bid:if aid==10:l.append(bid)返回HttpResponse(l)
这在我的视图中是错误的。def authbook(请求):#p=request.GET.GET('aid','')bo=Authors.objects.all()l=[]对于bo中的bid:if aid==10:l.append(bid)return HttpResponse(l)
这在我的视图中,可能是错误的。