2009-11-18 2 views
1

클라이언트 지향 기능을 위해 PHP를 사용하는 사이트의 관리자 패널로 장고 (특히 django-admin)를 사용하고 있습니다. 나는 관리자가 내가 원하는 방식으로 그리고 지금까지 그렇게 훌륭하게 보이도록 만드는 것을 어지럽 혀왔다. 그러나 나는 해결해야 할 몇 가지 문제를 겪었다.django-admin의 레코드 업데이트 관련 문제

class Permissions(models.Model): 
    id = models.IntegerField(primary_key=True) 
    league_key = models.CharField(max_length=15) 
    commissioner_id = models.ForeignKey(Accounts, db_column='commissioner_id', 
             to_field='id') 
    status = models.IntegerField() 
    key = models.CharField(max_length=50) 
    publisher_key = models.CharField(max_length=25) 
    publisher_display_name = models.CharField(max_length=50) 
    base_league = models.ForeignKey('self', db_column='id') 
    share = models.IntegerField() 
    default_fixture_key = models.CharField(max_length=50) 

    def __unicode__(self): 
     return self.publisher_key + '/' + self.league_key 

    class Meta: 
     db_table = u'permissions' 
     verbose_name = 'Permissions' 
     verbose_name_plural = 'Permissions' 

class PermissionsAdmin(admin.ModelAdmin): 
    list_display = ('league_key', 'publisher_key', 'commissioner_id', 'status', 
        'base_league', 'share', 'default_fixture_key') 
    list_display_links = ('league_key','commissioner_id', 'base_league') 
    exclude = ('id',) 

첫 번째 문제는 필요에 따라 기존 레코드를 편집하기위한 관리 양식 필드 중 하나를 표시된다는 점이다 :

는 여기에 내가 함께 일하고 있어요 모델입니다. django-admin에게 필드가 필요하고 필요하지 않을 때 어떻게 말합니까?

두 번째 문제는 내가이 레코드를 저장할 때 다음 오류가 발생한다는 것입니다. 중복 키 값이 고유 한 제약 조건 "permissions_pkey"을 위반합니다. 그건 내가 장고가 업데이트를하지 않고 있다고 생각하게한다. INSERT를하려고한다.

이것은 PostgreSQL과 관련된 문제일지도 모른다. permissions_pkey는 해당 테이블의 제약 조건이며 해당 테이블의 ID를 자동 증가시키는 데 사용되는 시퀀스를 추적합니다.

Django 문서는 훌륭하지만이 정보를 필요로하지 않습니다 .

(편집 : 스택 추적에 파고, 나는이 멋진 작은 덩어리 발견 : 날 리드

sql 
'UPDATE "permissions" SET "league_key" = E\'l.1258472565 \', "commissioner_id" = 7, 
"status" = 0, "key" = E\'cfcd208495d565ef66e7dff9f98764da \', 
"publisher_key" =  E\'chrishartjes.com \', 
"publisher_display_name" = E\'Chris Hartjes Free Press \', 
"id" = 744, "share" = 0, 
"default_fixture_key" = E\'\' WHERE "permissions"."id" = 745 ' 

는 자체 내 작은 외래 키는 항목이 문제를 일으키는 것으로 생각하는)를

+0

질문을 편집하고 모든 HTML 태그를 제거했습니다. 'class Meta'가 정확하게 들여 쓰기되어 있는지 확인해 주시겠습니까? –

+0

예, 죄송합니다. – GrumpyCanuck

답변

1
  1. 필드에 필드가 필요하지 않으면 null=True을 필드 생성자에 넣습니다. 편집 : 주석 작성자는 blank=True라고 말합니다. 그는 아마도 맞을 것입니다. 저는 제 앞에있는 문서가 없습니다.
  2. ID가 비어 있으면 삽입하고 ID에 값이 있으면 업데이트합니다. 이야기하는 내용이 어디에 저장되어 있는지 알 수는 없지만 그 정보가 도움이 될 수 있습니다. (exclude ('id')가 아마도이 문제의 원인 일 가능성이 있음을 지적하는 삭제 된 답변이 있음) -

또한 문서에 동의합니다. 파이썬을 읽을 수 있다면, 알아 내고자하는 영역에 대한 장고 소스 코드를 읽으려고하는 것이 좋습니다. 소스는 내가 읽은 가장 훌륭한 소스 중 일부입니다. 나는 지금까지 뛰어 들거나 읽는 데 문제가 없었습니다. 그것은 의사와 거의 비슷합니다.

+1

'blank = True'는 필드를 필요로하지 않습니다. 'null = True'는 데이터베이스의 빈 필드에 허용되는 null 값에만 영향을줍니다. 유효성 검사에 영향을 미치지 않습니다. –

2

문제 1 : nullblank 설정에 대한 설명서를 참조하십시오. 단편 소설 : null을 설정하면 DB에 null 값을 저장할 수 있습니다. 여기서 원하는 것은 (아마도) blank을 True로 설정하면 모델의 유효성을 검사 할 때 해당 필드가 필요하지 않게됩니다. 필드가 CharField가 아닌 경우 null도 True로 설정해야합니다. 여기에있는 문서를 참조하십시오 : http://docs.djangoproject.com/en/dev/ref/models/fields/#field-options

문제 2 : 여기 내가 원하는 것은 이 아니라 AutoField입니다. 차이점은 새 개체를 저장할 때 AutoField가 자동으로 새 ID를 생성한다는 것입니다. 여기에 문서를 참조하십시오 : http://docs.djangoproject.com/en/dev/ref/models/fields/#autofield

편집 : (내 의견에서) 나는 오류가 permissions_pkey를 참조하는 것을 볼 수 다시 찾고.id 필드를 pkey = AutoField(primary_key=True)으로 바꾸어보세요. 당신은 명시 적으로 권한 모델의 "ID"열이 필요하지 않습니다

  • 사실, 진정한 빈

  • +0

    blank에 추가됨 = 문제의 필드에 대해 True이고 이제는 정상적으로 작동합니다. AutoField로 변경하면보고되는 pkey 오류 문제를 해결하는 데 아무런 영향을 미치지 않았으며 exclude ('id',) 행을 삭제했습니다. : – GrumpyCanuck

    +0

    AutoField로 변경 한 후에 테이블을 삭제하고 다시 만들어야합니다. 실제로는 'id'필드를 모두 생략하는 것이 좋습니다. 장고는 자동으로 추가합니다. –

    +0

    삭제하고 다시 작성할 수 없습니다. 테이블은 작업 데이터로 가득차 있습니다. – GrumpyCanuck

    0
    1. 는 null = =, 나는 그 두 번째 문제를 일으키는 것을 믿습니다.

    관련 문제