Django - ManyToMany 字段 - 建立正确的链接

大林爸爸

python3 manager.py inspectdb(mysql) 和查看一些帮助和教程之后,我仍然有一些错误和不正确的结果。

模型.py

class A(models.Model):
    ida = models.AutoField(db_column='idA', primary_key=True)   
    col1 = #an another column
    has_B = models.ManyToManyField(B, related_name='a', through="AHasB", through_fields=('a_ida', 'b_idb'))
    #I had add this line after a tuto in django book for the manytomayfield

class B(models.Model):
    idb = models.AutoField(db_column='idB', primary_key=True)
    col1 = #an another column

class AHasB(models.Model):
    a_ida = models.ForeignKey(A)
    b_idb = models.ForeignKey(B)
    col1 = #an another column

查看.py

def myview(request):

   for element in b.filter(idb__in=a.values('has_B').distinct()):

      print(element)

在我的数据库中,我有

A : 
ida  | col1  
1    | ...   
2    | ... 
3    | ... 

B : 
idb  | col1  
1    | ...   

AHasB : 
a_ida  | b_idb  
1      | 1

但是当我ida -> idb像经典(SELECT idb,ida FROM A, B, AHasB WHERE AHasB.a_ida=A.ida AND AHasB.b_idb=B.idb一样显示结果)时,我有这个......

1  ->  1
2  ->  1
3  ->  1

在正常情况下,我只会有 1 -> 1。

也许模型不适合我后面的真实数据库。

编辑

查看.py

def myview(request):

   a = A.objects.All()
   b = B.objects.All()

   for element_a in a.filter("somefilters"):

      in_has_b = set(AHasB.objects.values_list('b_idb', flat=True));
      print(b.filter(idb__in=in_has_b))
泡菜

如果要选择每个 A 实例引用/拥有的所有 B 实例:

bs_for_each_a = {}

for a in A.objects.all():
   bs = AHasB.objects.filter(a_ida=a).values('b_idb')
   bs_for_each_a[a] = bs

如果您需要不同的 B,您可以尝试添加.distinct()aftervalues('b_idb')但我没有测试它。删除重复项的另一种方法是使用values_list('b_idb', flat=True)并传递查询结果set()

for a in A.objects.all():
   bs = AHasB.objects.filter(a_ida=a).values_list('b_idb', flat=True)
   bs_for_each_a[a] = set(bs)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django查询ManytoMany字段

来自分类Dev

Django,ManyToMany字段,使用额外的字段获取正确的对象

来自分类Dev

Django的ManyToMany字段的bulk_create的正确方法?

来自分类Dev

在Django中查询ManyToMany字段

来自分类Dev

Django麻烦创建ManyToMany字段

来自分类Dev

Django ManyToMany 字段 - 通过表访问字段

来自分类Dev

通过模型了解Django中的ManyToMany字段

来自分类Dev

Django过滤器ManyToMany字段

来自分类Dev

Django mongoengine文档中的Manytomany字段

来自分类Dev

Django中Manytomany字段的字母顺序错误

来自分类Dev

Django:尝试访问ManyToMany字段时出错

来自分类Dev

Django-在ManytoMany字段中导出CSV

来自分类Dev

如何在Django中修复Manytomany字段

来自分类Dev

从ManyToMany字段中以django teplate获取图像

来自分类Dev

Django上ManyToMany字段的唯一值

来自分类Dev

通过类的ManytoMany字段的Django syncdb

来自分类Dev

Django:使用信号来保存ManyToMany字段

来自分类Dev

Django mongoengine文档中的Manytomany字段

来自分类Dev

Django ManyToMany Relationship无法访问字段

来自分类Dev

如何访问 Django ManyToMany 字段的数据?

来自分类Dev

在 Django 模型方法中引用 ManyToMany 字段

来自分类Dev

保存时自动在Django中的ManyToMany字段中创建记录

来自分类Dev

如何在Django ManyToMany通过字段上使用ModelManager?

来自分类Dev

Django从post_save信号访问ManyToMany字段

来自分类Dev

如何在Django的Manytomany字段中添加对象

来自分类Dev

迁移重命名模型字段ManyToMany Django 1.8

来自分类Dev

ManytoMany字段中的Django ForeignKey显示为None

来自分类Dev

过滤Django中的ManyToMany字段无法按预期工作

来自分类Dev

Django REST:ManyToMany字段-不要更新其他记录

Related 相关文章

热门标签

归档