【问题标题】:Tastypie foreign key set nullTastypie 外键集 null
【发布时间】:2016-12-18 20:45:16
【问题描述】:

我需要在更新对象时将外键设置为空。

这是模型:

class Task(models.Model):
    parent_milestone = models.ForeignKey("Milestone", null=True, blank=True)
    parent_task = models.ForeignKey("Task", null=True, blank=True)

    name = models.CharField(max_length=256)
    description = models.TextField(blank=True, null=True)
    deadline = models.DateTimeField(blank=True, null=True)
    priority = models.IntegerField(default=2)

    done = models.BooleanField(default=False)

    def __unicode__ (self):
        return self.name

这里是美味的资源:

class TaskResource(ModelResource):
    subtasks = fields.ToManyField('self', 'task_set', full=True, readonly=True)

    parent_milestone = fields.ToOneField(MilestoneResource, 'parent_milestone', null=True, full=False)
    parent_task = fields.ToOneField('self', 'parent_task', null=True, full=False)

...

    def obj_update(self, bundle, **kwargs):
        bundle = super(TaskResource, self).obj_update(bundle, **kwargs)

        bundle.data['name'] = "test"
        bundle.data['parent_milestone'] = None <-- error here

        return self.obj_create(bundle, **kwargs)

在更新时看到名称被更新(任何更新的对象都获得名称“test”)。

但在更新 parent_milestone 时出现此错误:

"'NoneType' 对象没有属性 'parent_milestone'"

有什么帮助吗?

【问题讨论】:

    标签: django tastypie


    【解决方案1】:

    首先,您使用 super 执行 obj_update,然后执行 obj_create,这是您所期望的吗?

    如果您只想更新和覆盖parent_milestone,您可以这样做:

    class TaskResource(ModelResource):
        ....
        def obj_update(self, bundle, **kwargs):
    
            bundle.data['name'] = "test"
            bundle.data['parent_milestone'] = None  # now this will be override
    
            return super(TaskResource, self).obj_update(bundle, **kwargs)
    

    【讨论】:

    • 呸!为我工作=)非常感谢,你帮了我很多)
    猜你喜欢
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多