我已经创建了一个Flask SQLAlchemy API,它包含项到标记的多对多关系。在
简单的add没有问题(在适当的表中插入项和标记),但是如果我添加另一个具有相同标记名的项,它将创建一组重复的标记名,而不是仅仅将关联表链接到现有的标记项。在
我发现有些情况与我的要求非常接近,但并不完全相同,我真的很难理解实现这一目标的最佳方式。在
因此,问题是:在标记表中只有唯一的条目,同时仍然正确地将标记与条目表关联起来的最佳方法是什么?在
感谢您的帮助/指导!在
以下是我的模型:
items_tags = db.Table('items_tags',
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
db.Column('item_id', db.Integer, db.ForeignKey('item.id'))
)
class Item(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80), unique=False)
code = db.Column(db.String(), unique=False)
notes = db.Column(db.String(), unique=False)
tags = db.relationship('Tag', secondary=items_tags, back_populates="items")
def json(self):
list_tag = []
for tag in self.tags:
list_tag.append({"tag": tag.name, "id": tag.id })
return json.loads(json.dumps({"id": self.id, "title": self.title, "code": self.code, "notes": self.notes, "tags" : list_tag }))
def __init__(self, title, code, notes, tags):
self.title = title
self.code = code
self.notes = notes
self.tags = tags
def __repr__(self):
return self.title
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
items = db.relationship('Item', secondary=items_tags, back_populates="tags")
def json(self):
return {'id': self.id, 'tag': self.name}
def __init__(self, name):
self.name = name
def __repr__(self):
return self.name
这里是控制器:
^{pr2}$
我忽略了这样一个事实:我需要先查询标记是否存在(@dirn通过“更改如何加载现有记录”来达到的目的)。在
以下是我所做的,以确保没有添加重复标记:
相关问题 更多 >
编程相关推荐