save_model中的Django相关对象

丹尼尔W.

我想created_by为Django 3.0中的实体提供一个简单的字段:

来自模型的摘录:

class Event(models.Model):
    created_by = models.ForeignKey(CustomUser, verbose_name=_('Created by'), on_delete=models.CASCADE, null=False,
                                   blank=False, related_name='created_events', editable=False)

(已应用迁移。)

class EventAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        if obj is not None and obj.created_by is None:
            obj.created_by = request.user
        super().save_model(request, obj, form, change)

从管理页面保存时,出现此错误:

RelatedObjectDoesNotExist at /......./Events/event/add/
Event has no created_by.

我究竟做错了什么?

我尝试调试的内容:

def save_model(self, request, obj, form, change):
    print(obj) # Prints the __str__ output of the object correctly!
    if obj is not None and obj.created_by is None:
        user = CustomUser.objects.filter(id=request.user.id).first()
        obj.created_by = user # tried to assign a full model not just from request
    super().save_model(request, obj, form, change)
schwobaseggl

... obj.created_by is None ...属性的访问做了伤害。当您以这种方式访问​​不可为空的FK时,将引发显示的错误。您需要进行不同的测试,例如

if obj is not None and obj.pk is None:
    # ...

您还可以改写save_form可以直接访问这是否是新对象的位置:

def save_form(self, request, form, change):
    obj = super().save_form(request, form, change)
    if not change:
        # set user
    return obj

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django在保存到save_model后获取对象

在ModelAdmin中,当覆盖`save_model()`时如何获取对象的先前值

如何在Django管理表单save_model中获取字段值

如何在 Django admin 中通过 save_model 发送 Firebase 通知

Django:在管理員的 save_model 中獲取所有內聯對象

测试在save_model中使用request.user的Django模型

Django Admin使用save_model()对已更改(或保存)的某些字段的值进行加密

无法使用pre_save信号将相关对象保存在Django模型中

如何从save_model创建tflite文件(SSD MobileNet)

在Django中过滤嵌套的相关对象

在 Django 中查询用户相关对象

在 Django Admin 中创建多个相关对象

Django中自动更新相关对象

获取django中相关对象的列表

在Django中获取和显示相关对象

django中的重复对象,还重复了子对象(相关对象)

在Django中同时保存对象及其相关对象

Django 查询相关对象

django检索相关对象

过滤相关对象 Django

Django DetailView:相关对象

Django抛出ValueError:save()禁止,防止相关对象save方法未保存导致数据丢失

在 Django Admin 中的 User 模型中添加 User 相关对象

如何通过相关对象查询模型并使用Django ORM在queryset中获取相关对象

在Django REST Framework中检查相关对象的权限

使用 Django 中相关对象的数量对查询集进行排序

Django:在信号中获取与M2M相关的对象

Django:如何正确显示相关模型中的对象列表?

Django:在admin list_display中显示相关对象的数量