2016-08-26 3 views
1

은 내가 posts 응용 프로그램을 만들어이어떻게 django에서 사용자를 삭제 한 후 'username'을 유지할 수 있습니까?

from django.db import models 
from django.conf import settings 

from posts.models import Post 


class Comment(models.Model): 

    author = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.SET_NULL) 
    post = models.ForeignKey(Post) 

    content = models.CharField(max_length=400) 

    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 

    class Meta: 
     ordering = ('-created_at',) 

    def __str__(self): 
     return self.content 

같은 comment 모델을 가지고 그리고 몇 가지 의견 로그인 및 게시 : 나는 사용자 rightx2, 그것은 null 또는 None을하게 삭제 한 후 enter image description here

을 : enter image description here

나쁘게도 order 님의 댓글이 변경되었습니다.

아직 username을 만들고 계속 주문하고 싶습니다.

아이디어가 있으십니까? 대신, Comment 모델 author 속성을 설정 CharField을 시도하고이 Comment.author 속성은 저자 이름에 author이 그것을 만들 때마다 동일 수 있도록 views.py에 귀하의 코멘트 기능에 할당 행을 추가 models.ForeignKey를 사용

답변

1
당신이 on_delete=models.DO_NOTHING을 사용할 수 있습니다 그대로 저자 ID를 유지하기 위해, null=Trueon_delete=models.SET_NULLauthor 정의 있기 때문에 null을 설정했다

하지만 doc says

당신이 필요 수동으로 데이터베이스에 ON DELETE 제약 조건을 추가하십시오. 필드

하지만 여기에 사용자 이름을 유지하려면 주석을 비정규 화해야하고 주석 저장시 설정해야하는 별도의 username 필드를 사용해야합니다.

+0

사용자 이름을 저장할 다른 필드를 설정해야한다는 것을 알고 있습니다. 그러나 어느 쪽이 선호됩니까? 'on_delete = models.SET_NULL,'또는'on_delete = models.DO_NOTHING'? – user3595632

+0

당신의 경우에 따라'SET_NULL'과'is_null = True'를 사용하는 것이 더 합리적이라고 말할 수 있습니다. DO_NOTHING과 함께 사용하면 db에 ON DELETE 제약 조건을 추가해야합니다 – Shaikhul

관련 문제