又是一头撞墙。我正在尝试使用其他已知字段添加标签
# models.py
class MyModel(models.Model):
...
tags = models.ManyToManyField(Tag, blank=True)
field_m2m = models.ManyToManyField('M2mModel', blank=True)
field_fk = models.ForeignKey('FkModel', blank=True, null=True)
...
def save(self, *args, **kwargs):
for inst in self.field_m2m.all():
self.tags.add(Tag.objects.get(name=inst.name))
self.tags.add(Tag.objects.get(name=self.field_fk.name))
super(MyModel, self).save(*args, **kwargs)
class FkModel(models.Model):
name = models.CharField(max_length=255, unique=True)
...
class M2mModel(models.Model):
name = models.CharField(max_length=255, unique=True)
...
我 100% 确定我的 field_m2m 和 field_fk 不是空的,而且同样重要的是:存在对应于 EXISTING 标签的实例。我还有其他功能很好地涵盖了这部分。我还尝试对字符串 ( Tag.objects.get(name="mystring")
) 进行硬编码,以确保 101% 确定。
然而,没有通过管理面板分配标签。我试图通过 shell 中的步骤,它在那里工作。
>>> m = MyModel.objects.get(name='something')
>>> t = Tag.objects.get(name='sometag')
>>> m.tags.add(t)
>>> m.tags.all()
[<Tag: sometag>]
如何使其通过 save() 方法工作?
同样,在第一次创建模型实例之前,回溯一直在抱怨:"<MyModel: Something>" needs to have a value for field "mymodel" before this many-to-many relationship can be used.
我想我应该在做上述任务之前保存模型实例,对吧?我怎样才能一次完成这一切?