【问题标题】:django save_model() error creating a new object with m2m fieldsdjango save_model() 错误使用 m2m 字段创建新对象
【发布时间】:2012-02-25 11:50:34
【问题描述】:

我有一个模特models.py

class MyModelClass(models.Model):
    name  = models.CharField(max_length=255)
    m2m_1 = models.ManyToManyField(A, blank=True, null=True)     
    m2m_2 = models.ManyToManyField(B, blank=True, null=True) 
    fk    = models.ForeignKey('C')
    int   = models.IntegerField()   

还有一个admin.py 类:

class MyModelClassAdmin(admin.ModelAdmin):
    list_display = ('name',)

    #Get all fields selected in MyModelClass m2m_2
    def get_selected_in_m2m_2(self, obj):
        sel = obj.m2m_2.all() #This line is the one for i get an error. The error is described below.
        return sel

    def save_model(self, request, obj, form, change):
        """When creating a new object, set the creator field.
        """
        m2m_2_selected = self.get_selected_in_m2m_2(obj)
        print m2m_2_selected

        print request.user
        if not change:
            obj.creator = request.user
        obj.save()


问题:
如果我在我的管理页面中单击已经 existing MyModelClass 的对象上的“保存”按钮,一切正常。
但是,如果我尝试在管理页面中创建一个新模型对象并单击“保存”按钮(保存新对象,而不是更新现有对象),我会收到错误消息:@ 987654325@

对不起我的英语不好。
任何帮助表示赞赏。
谢谢。

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:
    def save_model(self, request, obj, form, change):
        """When creating a new object, set the creator field.
        """
        if not change:
            obj.creator = request.user
    
        super(MyModelClassAdmin, self).save_model(request, obj, form, change)
    
        m2m_2_selected = self.get_selected_in_m2m_2(obj)
        print m2m_2_selected
        print request.user
    

    【讨论】:

      【解决方案2】:

      很常见的问题。你没有对象,所以你不能设置m2m关系。尝试使用超级函数(对不起,不记得它的正确用法,但你很容易在文档中找到它)来创建这个对象(好吧,在更改之前处理纯函数)然后修改它并保存。

      【讨论】:

      • 赞成你是第一个说使用 super() 函数、保存和编辑的人。谢谢
      猜你喜欢
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 2020-08-13
      • 1970-01-01
      • 2015-06-09
      • 2020-08-06
      相关资源
      最近更新 更多