2017-01-23 2 views
0

django의 User 모델에 'sponsor'열을 추가하려고합니다. 문제는이 열이 사용자 이름 필드를 참조하도록하고 싶습니다 (그리고 그것은 비워 둘 수 있습니다). 나는 한 사용자의 스폰서가 될 수 의미 많은 다른 사용자 (없음 O)Django는 동일한 테이블을 참조하는 사용자 모델에 필드를 추가합니다.

이 같은

뭔가 :

(장고 사용자 모델 테이블)

+--------+------------------+ 
|username| sponsor   | 
+--------+------------------+ 
| Tom | ...    | 
| John | Tom    | 
| Louis | Tom    | 
| Michael| Louis   | 
+--------+------------------+ 

나는 다음과 같은 모델

에게 있습니다
# models.py 
class Sponsor(models.Model): 
    user = models.OneToOneField(User, primary_key=True) 
    sponsor = models.ForeignKey(User, null=True, to_field='username', related_name='spn') 

괜찮은지 잘 모르겠습니다. 그러나, 나는이 관리자 페이지를 통해 스폰서를 추가하기 위해 다음과 같은 일을 한 : 내 관리자 페이지에 새로운 사용자를 추가 할 때

# admin.py 
class SponsorInline(admin.TabularInline): 
    model = Sponsor 
    fk_name = 'sponsor' 

, 내가 스폰서를 추가하는 세 가지 스크롤 막대를 수신하고있어, 물론 괜찮은 것 같지 않습니다.

Look like this

편집은 내 SponsorInLine 클래스에 재산

extra = 1 

을 추가하고, 관리자 페이지는 이제 하나 개의 라인을 보여줍니다. 그래도 여전히 일대일 관계가 작동하지 않는 것 같습니다

입력란에 스폰서 사용자 이름을 입력하는 방법이 있습니까? 이 모든 것을 성취하는 가장 좋은 방법은 무엇입니까?

+0

"스폰서를 추가 할 수있는 세 개의 스크롤 막대가 있습니다."-이 질문을 명확히하기 위해 질문을 편집 할 수 있습니까? 스크린 샷을 추가하면 도움이 될 수 있습니다. –

+0

@GrishaLevit 좋아, 이제 막 추가했습니다! – rvliscano

+0

'extra' 속성을 사용하여 빈 줄 수를 지정할 수 있습니다. SponsorInline 클래스에'extra = 1'을 추가하십시오. – neverwalkaloner

답변

0

한 사용자가 다른 많은 (없음 O) 사용자

순간

, 모델의 스폰서가 될 수 있습니다 많은 사용자를 가질 수 있습니다 하나의 사용자 구성, 또는 하나 개의 스폰서가 하나의 사용자가 있습니다.

이제없는 모델을 User입니다 가정, 당신은 관계를 분명히 부정적인 당신이 그것을 사용하는 방법에 영향을 줄 것이다 다른 방법

class UserSponsor(models.Model): 
    user = models.OneToOneField(User) 
    sponsor = models.ForeignKey(Sponsor) 

를 처리하는 중간 모델을 구축해야 할 것이다.

그러나 한 스폰서가 여러 사용자를 스폰서 할 수있는 가능성을 놓친 경우 스폰서 모델에 ManyToManyField을 추가 할 수 있습니다.

+0

이것이 구현해야하는 것입니다. 사용자는 다른 많은 (또는 전혀) 사용자가 아닌 후원자가 될 수 있습니다. 그러나 한 명의 사용자는 한 명의 사용자 만 후원 할 수 있습니다. – rvliscano

관련 문제