2016-12-11 6 views
0

사용자가 체중, 신체 측정 등과 같은 정보를 등록, 로그인 및 업데이트 할 수있는 간단한 체중 관리 응용 프로그램을 만들고 있습니다. 장고를 잠시 사용하지 않았으며 느리게 배우는 것이 가장 좋습니다. 내가 전에 잠시 쉬었던 곳의 관행. 이 사람들이 내가 사용자에 ForignKey와 '통계'라는 간단한 응용 프로그램을 만들었습니다별도의 모델에서 사용자 정보 업데이트

등 페이스 북으로 로그인 할 수 있습니다로

나는 사용자 등록을 관리 할 장고 - allauth을 사용하고 있습니다.

class Stat(models.Model): 

    user = models.ForeignKey(User, default=False) 

    height = models.CharField(max_length=20) 
    weight = models.CharField(max_length=20) 

    waist = models.CharField(max_length=20) 
    hips = models.CharField(max_length=20) 
    upperleg = models.CharField(max_length=20) 

    upperleg = models.CharField(max_length=20) 
    calf = models.CharField(max_length=20) 

    bodyfat = models.CharField(max_length=20) 

사용자가 할 수 있기를 원하는 것은 일일/주 단위로 로그인 및 업데이트 통계입니다. 그런 다음 이전 통계를 검토 할 수 있습니다. 이것은 아마도 위의 접근법에 기초한 모델 양식을 통해 이루어질 것입니다. 시간이 갈수록 더 복잡해질 것입니다.

다른 방법으로 어떤 장점이 있습니까? 최선의 접근 방식이 최선이라면? 거기에 사용자의 통계를 쉽게 검토 할 수 있도록 관리자의 사용자 페이지 안에 해당 모델의 모든 개체를 나열 할 수있는 방법이 있습니까?

미리 감사드립니다.

답변

1

앱 사용자와 관련된 앱 별 기능을 위해 별도의 사용자 프로필 모델을 만드는 것이 좋습니다. User 개체에 대한 OneToOneField 링크가있는 UserProfile 모델을 만드는 것이 가장 좋습니다. 그런 다음 사용자의 Stat 모델은 User가 아닌 UserProfile에 ForeignKey 할 수 있습니다. 이는 사용자 객체에 추상화를 제공하고 사용자가 다른 사양을 요구하는 동일한 프로젝트에서 다른 장고 응용 프로그램을 만드는 경우 유연성을 제공합니다. 또한 UserProfile을 사용하면 응용 프로그램마다 사용자 정의 된 필드를 추가 할 수 있습니다.

이 모델링을 향상시키기 위해 할 수있는 또 다른 방법은 각 통계에 대해 별도의 엔티티를 생성하는 것입니다. 예 : HeightWeightStat, WaistStat. 그러나 이것은 완전히 필요한 것은 아니며 전적으로 귀하의 취향에 달려 있습니다.

가 관리자 페이지에서 합계 인스턴스 관련하여 사용자의를 표시하려면, 장고 관리자 인라인 사용 : 귀하의 회신 https://docs.djangoproject.com/en/1.10/ref/contrib/admin/#inlinemodeladmin-objects

+0

안녕 @zubhav 덕분에, 그 많은을 도왔다. 사용자에게 액세스해야하는 각 앱 내에서 사용자 모델을 확장하겠습니까? 그래서 내 '통계'애플 리케이션 내부에 새로운 UserProfile 모델을 만들 수 있습니까? 또는 UserProfile에 대한 새 앱을 만드시겠습니까? 첫 번째 것이 맞을 것이라고 확신하지만, 그게 맞는지 확인하고 싶습니다. 좋은 작은 글을 여기에서 발견했습니다. - https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html#onetoone – JDavies

+1

사용자를 '확장'하는 대신 모델을 만들려면 OneToOne User (사용자에 대한 OneToOne) 링크가있는 완전히 다른 모델을 만들어야합니다. 이는 사용자가 누군가를 식별/인증하는 데 엄격하게 사용되어야하는 모델이기 때문입니다. 높이와 무게와 같은 User 객체에 별도의 필드를 갖는 것이 가장 좋지 않습니다. 이는 단순히 엔티티와 직접 관련이 없기 때문입니다. 아마 위의 내용이 실제로 의미 한 것이지만 '확장'이라고 말하면서 명확히하고 싶습니다. 하지만 네, 모든 새로운 앱 안에 새로운 프로필 모델을 만들 것입니다. – zubhav

+1

첨부 한 링크를 방금 클릭했습니다. 예, 올바른 방법입니다! – zubhav