簡體   English   中英

Django 相關 object 在 save_model

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM