django save_model()使用m2m字段创建新对象时出错

时间:2012-02-25 11:50:35

标签: django django-models django-admin

我有一个模型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()


问题:
如果我点击管理页面中现有 MyModelClass对象上的“保存”按钮,一切正常。
但是如果我尝试在admin-page中创建一个新的模型对象并单击“保存”按钮(保存一个新对象,而不是更新现有对象),我将收到一个错误:{ {1}}

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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