2010-04-27 2 views
0

안녕하세요, 장고를 첨부 한 shoutbox가있는 팝업 라디오 플레이어를 만들고 있는데 내가 원하는 관리 기능을 얻는데 문제가 있습니다.django admin - 사이트에 게시 할 단일 모델 선택

나는 두 가지 모델이 있습니다

1) 관리자가 FrontPage를 연주에 게시 할 수있는 특정 라디오 스트림을 나타내는 스트림 (- 즉, 여러 개의 저장 스트림이있다, 그러나 단 하나 FrontPage를 연주한다 한 번에 관리자의 재량에 따라)

2) shoutbox (shoutbox에 입력되어 있고 특정 스트림과 연결된 샤웃트, 즉 모든 스트림에는 사용자가 입력 한 여러 개의 소리가 있습니다. 사이트).

관리자가 백엔드에 로그인하여 여러 개의 스트림을 만들 수있게하려면 언제든지 한 권을 게시하도록 선택하십시오. 각 스트림에는 특성 (예 : is_published)이 있어야하며 모든 스트림을 확인하고 올바른 스트림 만 게시하기위한 관리 작업을 만들어야합니다. 이 문제를 해결하는 올바른 방법인가요 아니면 뭔가 빠졌는가

답변

1

내가 생각하는 유일한 잠재적 인 문제는 누군가가 이미 연결되어 있고 관리자가 변경하기 전에 스트림을 듣고 있다면 어떻게 될까요? 그 사람이 새 스트림을 듣거나 그들이 듣고있는 스트림을 계속 듣고 있어야합니까?

당신이 그것을 묘사 한 방식 외에, 나는 그것이 작동하는 것을 볼 수있었습니다. /stream/current/과 같이 항상 현재 스트림을 반환하는 URL /보기를 만들 수 있습니다. 해당 URL에 대한 뷰는 항상 당신이 만들 수있는,

def current_stream(request, *args, **kwargs): 
    # Get first stream marked as published 
    s = Stream.objects.filter(is_published=True)[1][0] 
    return do_streaming_stuff(s) 

당신은 아마이 앱에 다른 곳에서 "활성 스트림으로이 스트림을 설정"사용하려고하고 있기 때문에 ... 최신 Stream 모델을 얻을 것이다 그것을 스트림 모델의 일부입니다 ...

class Stream(models.Model): 
    is_published = models.BooleanField() 

    def set_as_active_stream(self, do_save=True): 
     enabled_streams = Stream.objects.filter(is_published=True) 
     for s in enabled_streams: 
      s.is_published=False 
      s.save()  
     if do_save: 
      self.is_published=True 
      self.save() 

    def save(self, *args, **kwargs): 
     if self.is_published: 
      # No need to double save, since we're already saving it 
      self.set_as_active_stream(do_save=False) 
     super(Stream, self).save(*args, **kwargs) 
+0

정확하게하고 싶은 것 같습니다. 훌륭한! 웹 사이트는 한 번에 한 개의 스트림 만 생깁니다. 또한 각 스트림에는 사용자가 전환 할 수있는 많은 mp3 녹음 파일이 있습니다. 스트림간에 수동으로 전환하는 기능을 추가 할 수 있습니다. 관리자가 관리 영역에서 사이트에 게시 할 특정 스트림을 게시 할 수있게하려고합니다. 이 작업을 수행하기 위해 관리자 작업을 사용해야한다고 말하는 것이 맞습니까? – pastylegs

+0

MVC 패턴과 로직에서 데이터베이스 액션을 분리하는 것에 대해 여전히 고민 중입니다. 모델 자체가 작동하는 기능을 가지고 있다는 것을 알게되었습니다. 모델이 아닌보기에 있어야합니까? – pastylegs

+1

@pasty Django는 실제로 MVT이며 MVC와 약간 다릅니다. 아마도 다소 우월한 생각이지만, 두꺼운 모델, 얇은 전망에 기대고 있습니다. 이런 식으로 코드 중복이 적다는 것을 알았습니다. 나는 다른 사람들이 얇은 모델과 두꺼운 견해에 대해 좋은 논거를 할 수있을 것이라고 확신한다. –