我想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)
该... 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] 删除。
我来说两句