标签: many-to-many

用于编辑具有多对多关系的数据的GUI模式

我经常遇到一种情况,我需要提出一个GUI来编辑具有:m关系的数据.我正在寻找用户友好的GUI想法.

[table1]
   |
  /|\
[table2]
  \|/
   |
[table3]
Run Code Online (Sandbox Code Playgroud)

通常,GUI类似于以下内容:


Grid that shows all items from table1

Add table3 item... (显示带有table3项的模态窗口)


Grid that shows all items from table3


在用户选择了table3项之后,我向table2添加了一个新行并刷新了网格.

缺点:

  • 你只能将table3项添加到table1,而不是相反;
  • 您只能浏览table1项目并查看相关的table3项目;
  • 我需要有一个table3项的过滤网格,以及一个类似的选择新项目;

我的问题:

有没有人知道一种更好的方式来直观地浏览和编辑具有:m关系的数据?或者我可以从现有软件包"窃取"的任何好模式?

language-agnostic user-interface many-to-many

27
推荐指数
1
解决办法
8465
查看次数

如何在ManyToMany表(Django)中添加列

从Django Book的例子中,我了解如果我创建如下模型:

from xxx import B

class A(models.Model):
    b = ManyToManyField(B)
Run Code Online (Sandbox Code Playgroud)

Django将在表A之外创建一个新表(A_B),它有三列:

  • ID
  • 援助
  • 出价

但是现在我想在表A_B中添加一个新列,因此如果我使用普通的SQL会很容易,但现在任何人都可以帮我怎么做?我在本书中找不到任何有用的信息.

python django many-to-many

27
推荐指数
1
解决办法
1万
查看次数

SqlAlchemy和Flask,如何查询多对多关系

我需要帮助创建SqlAlchemy查询.

我正在做一个Flask项目,我正在使用SqlAlchemy.我在models.py文件中创建了3个表:Restaurant,Dish和restaurant_dish.

restaurant_dish = db.Table('restaurant_dish',
    db.Column('dish_id', db.Integer, db.ForeignKey('dish.id')),
    db.Column('restaurant_id', db.Integer, db.ForeignKey('restaurant.id'))
)

class Restaurant(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(64), index = True)

    restaurant_dish = db.relationship('Dish', secondary=restaurant_dish,
        backref=db.backref('dishes', lazy='dynamic'))


class Dish(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(64), index = True)
    info = db.Column(db.String(256), index = True)
Run Code Online (Sandbox Code Playgroud)

我已将数据添加到restaurant_dish表中,它应该正常工作.我需要帮助的地方是了解如何使用餐厅正确获取菜肴.原始SQL将是这样的:

SELECT dish_id FROM restaurant_dish WHERE restaurant_id == id
Run Code Online (Sandbox Code Playgroud)

我设法完成但没有工作:

x = Restaurant.query.filter_by(Restaurant.restaurant_dish.contains(name)).all()
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助,我也非常感谢教程可以指向正确的方向(官方文档在我的脑海中).

python sql many-to-many sqlalchemy flask

27
推荐指数
1
解决办法
2万
查看次数

Django - 从多个到多个字段中获取对象

我在模型中有一个名为"admins"的m2m字段,我需要从视图中获取该字段中所有选定的条目,即用户ID.然后使用用户ID获取每个用户的电子邮件.可能吗?

我想要做的确切事情是向该平台内的所有空间管理员发送大量的内容.

空间模型:

class Space(models.Model):

    """     
    Spaces model. This model stores a "space" or "place" also known as a
    participative process in reality. Every place has a minimum set of
    settings for customization.

    There are three main permission roles in every space: administrator
    (admins), moderators (mods) and regular users (users).
    """
    name = models.CharField(_('Name'), max_length=250, unique=True,
        help_text=_('Max: 250 characters'))
    url = models.CharField(_('URL'), max_length=100, unique=True,
        validators=[RegexValidator(regex='^[a-z0-9_]+$',
        message='Invalid characters in the space URL.')],
        help_text=_('Valid characters are lowercase, digits and \
    admins = …
Run Code Online (Sandbox Code Playgroud)

django many-to-many django-models django-orm

27
推荐指数
3
解决办法
4万
查看次数

django 1.4多对多批量添加

我想知道是否有相当于"添加全部"或"批量创建"的多对多关系,这减少了查询的数量(我会为长列表这样做)?

关于这个主题的文档似乎暗示这是不可能的:

https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/

**Associate the Article with a Publication:**
a1.publications.add(p1)

**Create another Article, and set it to appear in both Publications:**
a2 = Article(headline='NASA uses Python')
a2.save()
a2.publications.add(p1, p2)
a2.publications.add(p3)
Run Code Online (Sandbox Code Playgroud)

django many-to-many

26
推荐指数
2
解决办法
1万
查看次数

SQL JOIN多对多

对简约标题感到抱歉,但我不知道如何描述它.我有三张桌子:

组表

ID | Genre
-----------------
1  | Action
2  | Adventure
3  | Drama
Run Code Online (Sandbox Code Playgroud)

很多很多桌子

GroupID | ElementID
-----------------
    3   |    1
    1   |    2
    2   |    2
    2   |    3
    3   |    3
Run Code Online (Sandbox Code Playgroud)

和元素表

ID | Element
-----------------
1  | Pride and Prejudice
2  | Alice in Wonderland
3  | Curious Incident Of A Dog In The Night Time
Run Code Online (Sandbox Code Playgroud)

一切都很好,非常简单.我想要实现的SELECT如下

ID | Element                                         |  Genre
-------------------------------------------------------------
1  | Pride and Prejudice                             | Drama
2  | Alice in Wonderland …
Run Code Online (Sandbox Code Playgroud)

mysql sql many-to-many join

26
推荐指数
1
解决办法
6万
查看次数

Android SQLite和数据库方案上的ORM

我正在寻找一个非常简单的ORM框架,用于Android上的SQLite.我一直在测试ActiveAndroid,但是没有一个例子能够在Eclipse上构建.
那么,人们如何在SQLite for Android中实现"多对多"关系?您如何反映有关删除行并保证数据库完整性的级联?

sqlite orm android many-to-many crud

25
推荐指数
5
解决办法
3万
查看次数

如何在SQLAlchemy ORM上实现自引用多对多关系,并引用相同的属性?

我正在尝试使用SQLAlchemy上的声明来实现自引用的多对多关系.

这种关系代表两个用户之间的友谊.在线我发现(在文档和谷歌中)如何建立一个自我参照的m2m关系,在某种程度上角色是有区别的.这意味着在这个m2m关系中,UserA例如是UserB的老板,所以他将他列为"下属"属性或者你有什么.同样,UserB在'上级'下列出UserA.

这没有问题,因为我们可以用这种方式声明一个backref到同一个表:

subordinates = relationship('User', backref='superiors')
Run Code Online (Sandbox Code Playgroud)

当然,那里的'上级'属性在课堂上并不明确.

无论如何,这是我的问题:如果我想反馈到我正在调用backref的相同属性怎么办?像这样:

friends = relationship('User',
                       secondary=friendship, #this is the table that breaks the m2m
                       primaryjoin=id==friendship.c.friend_a_id,
                       secondaryjoin=id==friendship.c.friend_b_id
                       backref=??????
                       )
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为如果A和B交朋友关系角色是相同的,如果我调用B的朋友,我应该得到一个包含A的列表.这是完整的问题代码:

friendship = Table(
    'friendships', Base.metadata,
    Column('friend_a_id', Integer, ForeignKey('users.id'), primary_key=True),
    Column('friend_b_id', Integer, ForeignKey('users.id'), primary_key=True)
)

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)

    friends = relationship('User',
                           secondary=friendship,
                           primaryjoin=id==friendship.c.friend_a_id,
                           secondaryjoin=id==friendship.c.friend_b_id,
                           #HELP NEEDED HERE
                           )
Run Code Online (Sandbox Code Playgroud)

对不起,如果这是太多的文字,我只想尽可能明确地用这个.我似乎无法在网上找到任何参考资料.

python many-to-many sqlalchemy self-reference

25
推荐指数
2
解决办法
7286
查看次数

SQLAlchemy:按至少一个多对多相关表中的成员身份进行过滤

使用SQLAlchemy 0.7.1和M​​ySQL 5.1数据库,我建立了多对多关系,如下所示:

user_groups = Table('user_groups', Base.metadata,
    Column('user_id', String(128), ForeignKey('users.username')),
    Column('group_id', Integer, ForeignKey('groups.id'))
)

class ZKUser(Base, ZKTableAudit):
    __tablename__ = 'users'

    username   = Column(String(128), primary_key=True)
    first_name = Column(String(512))
    last_name  = Column(String(512))

    groups = relationship(ZKGroup, secondary=user_groups, backref='users')

class ZKGroup(Base, ZKTableAudit):
    __tablename__ = 'groups'

    id          = Column(Integer, primary_key=True)
    name        = Column(String(512))
Run Code Online (Sandbox Code Playgroud)

用户可以属于多个组,而组可以包含多个用户.

我正在尝试做的是构建一个SQLAlchemy查询,该查询仅返回属于组列表中至少一个组的用户.

我玩这个in_函数,但这似乎只适用于测试列表中成员资格的标量值.我不是一个SQL编写者,所以我甚至不知道SELECT这需要什么样的声明.

python mysql many-to-many sqlalchemy

23
推荐指数
2
解决办法
1万
查看次数

在Entity Framework Core中保存多对多关系

例如,我有3个类,我用它们用于多对多关系:

public class Library
{
    [Key]
    public string LibraryId { get; set; }
    public List<Library2Book> Library2Books { get; set; }
}

public class Book
{
   [Key]
   public string BookId { get; set; }
   public List<Library2Book> Library2Books { get; set; }
}

public class Library2Book
{
    public string BookId { get; set; }
    public Book Book { get; set; }

    public string LibraryId { get; set; }
    public Library Library { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

它们配置为ApplicationDbContext:

protected override void …
Run Code Online (Sandbox Code Playgroud)

c# many-to-many entity-framework-core

23
推荐指数
1
解决办法
2万
查看次数