默认情况下如何将self添加到ManyToManyField?

时间:2016-07-27 15:21:23

标签: python django django-models django-signals

是否可以添加self - 我的意思是当前对象是ManyToManyField

class City(models.Model):
    name = models.CharField(max_length=80)
    country = models.ForeignKey('Country')
    close_cities = models.ManyToManyField('City',blank=True, related_name='close_cities_set')

如果我创建,请说x = City.objects.create(...),我希望x默认为close_cities的一部分。

我找不到与此问题相关的任何内容。我试图覆盖create()方法,但它没有用。

尝试后,我决定创建一个信号,在创建实例后添加城市。不幸的是,这不起作用,但我无法弄清楚为什么。正在调用信号,条件if createdTrue(已选中)。

@receiver(post_save,sender=myapp_models.City)
def add_self_into_many_to_many_field(sender, instance, created, **kwargs):
    if created:
        instance.close_cities.add(instance)
        instance.save()

你知道问题出在哪里吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,pre_save信号将是更好的解决方案。

在您的解决方案city.save中调用add_self_into_many_to_many_fieldinstance.save来电add_self_into_many_to_many_field。等等...

@receiver(pre_save, sender=myapp_models.City)
def add_self_into_many_to_many_field(sender, instance, **kwargs):
    if instance.pk is None:
        instance.close_cities.add(instance)