2016-12-22 21 views
1

PtoHistoryモデルで正しく表示されない:Djangoのモデルフィールドは、Djangoの管理者

class PtoHistory(models.Model): 
    LEAVE_CHOICES = (
     (True, 'PTO'), #is chargeable? 
     (False, 'Jury Duty'), #is chargeable? 
     (False, 'Voting'), #is chargeable? 
     (False, 'Military Leave'), #is chargeable? 
     (False, 'Bereavement'), #is chargeable? 
     (True, 'Emergency'), #is chargeable? 
    ) 

    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    leave_start_date = models.DateTimeField(auto_now=False, auto_now_add=False) 
    leave_end_date = models.DateTimeField(auto_now=False, auto_now_add=False) 
    leave_type = models.BooleanField(choices=LEAVE_CHOICES) 

    def __str__(self): 
     return self.user.username 

問題を:

私はDjangoの管理者の内部で "leave_type" を変更するたびに、ために例えば、 "Emergency"ではdjangoの管理者には "PTO"と表示されますが、両方ともTrueですが、PTOがタプルの最初に表示され、djangoの管理者に "PTO"が表示されます。 Falseであるすべてのオプションについても同じことが起こります。 「Military Leave」が選択されて保存されている場合、Django管理者のビューでは、「Jury Duty」がタプルの最初のfalseであるため、「Jury Duty」として表示されます。

私は起こるしたい何

dango admin pic

ユーザが「死別」を選択した場合、私は「死別」は、選択した選択肢としてDjangoの管理者に表示したいと私はしたいですこれは、従業員のPTO時間に対してカウントされないことを意味するFalse値に対応します。

希望の出力が理解できることを願っています。必要な場合は、より明確化またはコードスニペットを提供できます。正直なところ、私は正しい方法でそれについて行くのかどうか分からない。ですから、私のモデルを何らかの方法で再構築する必要がある場合、私はある方向に感謝します。

寝てしまったので、私はキーと値のペアを保存できるところでこの問題を解決するにはPython辞書が最適な方法だと思っていますが、私はdjangoモデルのフィールド型 "辞書" 。

答えて

0

CharFieldにすることができます。そのため、ユーザーはライブタイプのようなものを選択するのがはるかに簡単です。

class PtoHistory(models.Model): 
    LEAVE_CHOICES = (
     ('pto', 'PTO'), #is chargeable? 
     ('jury duty', 'Jury Duty'), #is chargeable? 
     ('voting', 'Voting'), #is chargeable? 
     ('military leave', 'Military Leave'), #is chargeable? 
     ('bereavement', 'Bereavement'), #is chargeable? 
     ('emergency', 'Emergency'), #is chargeable? 
    ) 

    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    leave_start_date = models.DateTimeField(auto_now=False, auto_now_add=False) 
    leave_end_date = models.DateTimeField(auto_now=False, auto_now_add=False) 
    leave_type = models.CharField(max_length=225, choices=LEAVE_CHOICES) 

    def __str__(self): 
     return self.user.username 

私はLEAVE_CHOICE外のモデルを定義し、考えた後で、あなたのforms.pyあなたがお返事のために何か似here

LEAVE_CHOICES = (
     (True, 'PTO'), #is chargeable? 
     (False, 'Jury Duty'), #is chargeable? 
     (False, 'Voting'), #is chargeable? 
     (False, 'Military Leave'), #is chargeable? 
     (False, 'Bereavement'), #is chargeable? 
     (True, 'Emergency'), #is chargeable? 
    ) 

class PtoHistory(models.Model): 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    leave_start_date = models.DateTimeField(auto_now=False, auto_now_add=False) 
    leave_end_date = models.DateTimeField(auto_now=False, auto_now_add=False) 
    leave_type = models.BooleanField(choices=LEAVE_CHOICES) 

    def __str__(self): 
     return self.user.username 

forms.py

class PtoHistoryModelForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 
     fields = ['leave_start_data', 'leave_end_data', 'leave_type'] 
     widgets = { 
      'leave_type': forms.RadioSelect 
     } 
+0

おかげを持ち、ラジオボタンウィジェットを定義します@PetarP。それぞれの休暇タイプを真偽値に対応させるにはどうすればよいでしょうか?これは可能ですか?私が今持っている方法では、ユーザーは選択肢のドロップダウンリストを取得するので、ソリューションは実際にフロントエンドで相互作用する方法を変えることはありません。 – FlashBanistan

+0

'' boolean'フィールドのみに関連しています。ここに 'forms.py'の' RadioSelect'ウィジェットをどのように使用できるかについての例[http://stackoverflow.com/a/3961084/4107823]があります。 – PetarP

+0

@ AaronChesley私は自分の答えを更新しました – PetarP

関連する問題