代码之家  ›  专栏  ›  技术社区  ›  twitu

在Django中保存模型而不写入数据库

  •  0
  • twitu  · 技术社区  · 7 年前

    y/n 样式输入。问题是我无法创建不保存的对象,正如您在下面看到的那样。

    >>> mov = Movie(name="completenothing")
    >>> direc = Director(name="Someone")
    >>> direc.movie_name.add(mov)
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
      File "/home/username/Code/virtualenvironments/matrix/local/lib/python2.7/site-packages/django/db/models/fields/related_descriptors.py", line 513, in __get__
        return self.related_manager_cls(instance)
      File "/home/username/Code/virtualenvironments/matrix/local/lib/python2.7/site-packages/django/db/models/fields/related_descriptors.py", line 830, in __init__
        (instance, self.pk_field_names[self.source_field_name]))
    ValueError: "<Director: Someone>" needs to have a value for field "id" before this many-to-many relationship can be used.
    >>> direc.save()
    >>> direc.movie_name.add(mov)
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
      File "/home/username/Code/virtualenvironments/matrix/local/lib/python2.7/site-packages/django/db/models/fields/related_descriptors.py", line 934, in add
        self._add_items(self.source_field_name, self.target_field_name, *objs)
      File "/home/username/Code/virtualenvironments/matrix/local/lib/python2.7/site-packages/django/db/models/fields/related_descriptors.py", line 1060, in _add_items
        (obj, self.instance._state.db, obj._state.db)
    ValueError: Cannot add "<Movie: completenothing N/A>": instance is on database "default", value is on database "None"
    >>> mov.save()
    >>> direc.movie_name.add(mov)
    

    导演和电影处于多对多关系中,我希望在保存之前显示他们的信息。是否有某种机制允许这样做?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Josewails    7 年前

    如果你使用 pre_save 信号,你可以试试这个。

    from django.db.models.signals import pre_save
    
    
    
    def confirm_save(sender, instance, **kwargs):
    
        # do something with your instance (display information)  
    
        ans = input("Do you want to save(y/n)")
    
    
        if ans == 'y':
            print("Your instance saved successfully")
    
        else:
            raise Exception("Not saved")
    
    pre_save.connect(confirm_save, sender=MyModel)