2009-12-16 3 views
2

장고를 사용하여 브라우저 게임을 작성하려하지만 게임 설정을 저장하는 방법에 조금 어려움이 있습니다. 예를 들어, 게임은 틱 기반이며 현재 틱을 저장하려고합니다. 필자는 내장 된 사용자 인증 시스템에 문제가 발생하지 않도록 데이터베이스 당 하나의 게임만을 원한다고 결정했습니다 (예를 들어 다른 게임에서 이미 사용 되었기 때문에 사용자 이름 X를 사용할 수 없다는 말은하지 않으려합니다). 내가 알 수있는 한, 나는 여전히이 정보를 데이터베이스 테이블에 저장해야하지만, 최선을 다할 수있는 방법은 잘 모르겠습니다. 2 가지 옵션이있는 것 같습니다 :Django에서 데이터베이스 설정을 저장하는 가장 좋은 방법은 무엇입니까?

가) 게임을 다른 테이블 (예 : 사용자 프로필)에서 참조하는 일반 모델로 설정하고 두 개 이상의 게임이있을 수 있다는 가능성을 무시하십시오. 이것은 기술적으로 2 개의 게임 행을 가질 수 있다는 것을 의미하지만, 만약 상황이 아주 쉽게 깨지게된다면 말입니다.

B) 나는 항상 게임에 대한 모든 구성 데이터를 저장하는 단 하나의 행만 있다고 가정하는 모델을 가지고 있습니다. 이 모델에는 정적 메소드 만 들어 있으며 다른 모델에는이 모델에 대한 참조가 없습니다. 예컨대 : 이러한 옵션 중 어느 것도 나에게 "권리"를 보이지만 하나가 다른 것보다 더 나은 경우 사람이 말해 줄 수

class Game(models.Model): 
    current_slot = models.PositiveIntegerField(default=0) 

    @staticmethod 
    def slots_per_day(self): 
     Genre.objects.get(id=1).current_slot 

? 아니면 아직 보지 못한 다른 옵션이 있습니까?

답변

5

좀 더 일반적이고 "설정"레코드 만있을 수 있습니다. 이렇게하면 무한히 저장할 수있는 설정의 양을 확장 할 수 있습니다.

class Setting(models.Model): 
    name = models.CharField(max_length=50) 
    value = models.TextField() 

# ... 

# Get the current slot setting 
current_slot = Setting.objects.get(name='current_slot').value 

# ... 

# Or wrap it in a helper method 
def get_setting(name, default_value): 
    try: 
     return Setting.objects.get(name=name).value 
    except: 
     return default_value 

current_slot = get_setting('current_slot', 0) 
+0

내가 잘못 알고있는 명백한 해결책이 여기 있습니다. 웃긴 일은 과거에 해냈습니다. – Bonnici

0

왜 게임 당 하나의 데이터베이스가 필요한지 알 수 없습니다. 게임 당 하나의 행이있는 게임 테이블을 만들고 다른 모든 데이터 테이블이 연결된 게임의 game_id를 참조하게하십시오.

+0

주로 데이터베이스 차원의 User 모델로 인한 복잡성 때문에. 그렇게 할 수는 있지만 좀 지저분해질 것이라고 생각합니다. – Bonnici

+0

나는 또한 장고 게임을하고 있었고 전역 사용자 (Global User) 모델과 특정 게임 인스턴스에 연결된 플레이어 모델을 가지고있었습니다. – Aaron

관련 문제