确定属于django多对多链接的字段
我有 4 个假设模型:
class Basea(models.Model):
name = models.CharField("Name", max_length=30)
type = models.ManyToManyField('Type', blank=True, related_name='types', db_table=u'test_basea_type')
class Baseb(models.Model):
name = models.CharField("Name", max_length=30)
type = models.ManyToManyField('Type', blank=True, related_name='types', db_table=u'test_baseb_type')
class Basec(models.Model):
name = models.CharField("Name", max_length=30)
type = models.ManyToManyField('Type', blank=True, related_name='types', db_table=u'test_basec_type')
class Type(models.Model):
name = models.CharField("Name", max_length=30, unique=True)
baseas = ManyToManyField_NoSyncdb(Basea, blank=True, related_name='type_baseas', db_table=u'test_basea_type')
basebs = ManyToManyField_NoSyncdb(Baseb, blank=True, related_name='type_basebs', db_table=u'test_baseb_type')
basecs = ManyToManyField_NoSyncdb(Basec, blank=True, related_name='type_basecs', db_table=u'test_basec_type')
我正在创建一个新类型,并且我想在保存新类型对象后附加一个多对多链接。在我看来,这工作得很好:
if form.is_valid(): # All validation rules pass
new_obj = form.save(commit=False)
# Do some stuff
new_obj.save()
new_obj.baseas.add(link_object.id) #link_object pulled earlier in the code
所以我将有一个 link_object,它可以是 Basea、Baseb 或 Basec。我可以使用什么代码来更改最后一行:
new_obj.baseas.add(link_object.id)
以便该字段对应于正确的对象类型?因此,如果 link_object 来自 Baseb,则代码应该执行以下功能:
new_obj.basebs.add(link_object.id)
如何更通用地定义该字段名称?
I have 4 hypothetical models:
class Basea(models.Model):
name = models.CharField("Name", max_length=30)
type = models.ManyToManyField('Type', blank=True, related_name='types', db_table=u'test_basea_type')
class Baseb(models.Model):
name = models.CharField("Name", max_length=30)
type = models.ManyToManyField('Type', blank=True, related_name='types', db_table=u'test_baseb_type')
class Basec(models.Model):
name = models.CharField("Name", max_length=30)
type = models.ManyToManyField('Type', blank=True, related_name='types', db_table=u'test_basec_type')
class Type(models.Model):
name = models.CharField("Name", max_length=30, unique=True)
baseas = ManyToManyField_NoSyncdb(Basea, blank=True, related_name='type_baseas', db_table=u'test_basea_type')
basebs = ManyToManyField_NoSyncdb(Baseb, blank=True, related_name='type_basebs', db_table=u'test_baseb_type')
basecs = ManyToManyField_NoSyncdb(Basec, blank=True, related_name='type_basecs', db_table=u'test_basec_type')
I'm creating a new Type, and I want to attach a many-to-many link after the new Type object is saved. In my view, this works just fine:
if form.is_valid(): # All validation rules pass
new_obj = form.save(commit=False)
# Do some stuff
new_obj.save()
new_obj.baseas.add(link_object.id) #link_object pulled earlier in the code
So I'll have a link_object that's either Basea, Baseb, or Basec. What code could I use to change the last line:
new_obj.baseas.add(link_object.id)
such that the field corresponds to the correct object type? So if link_object was from Baseb, the code should perform the function:
new_obj.basebs.add(link_object.id)
How can that field name be defined more generically?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为您正在寻找 GenericForeignKey< /a>.
I think you are looking for GenericForeignKey.