[英]Django related object in save_model
我想要一個簡單的created_by
字段,用於 Django 3.0 中的實體:
來自 Model 的片段:
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
,而不是直接訪問這是否是新的 object:
def save_form(self, request, form, change):
obj = super().save_form(request, form, change)
if not change:
# set user
return obj
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.