2017-11-17 3 views
2

私が持っている市場モデル:Djangoの管理者の条件付き表示をインラインフィールドを持つ

class VacationEvent(models.Model): 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    process_fba = models.BooleanField(default=True) 

    @property 
    def has_amazon_fba_vacation(self): 
     return hasattr(self, 'amazon_fba_vacation') 

そしてadmin.pyで:作成するときに、私は条件付きでFBAInlineクラスを表示する必要が

class FBAInline(admin.StackedInline): 
    model = AmazonFBAVacation 
    can_delete = False 
    verbose_name_plural = 'amazon fba vacation' 
    fk_name = 'event' 

\ VacationEventAdminを更新しています。それが本当であるかのようlist_filterは、「process_fba」フィールドの真\偽の値を示しています - FBAInlineが表示されなければならない:

@admin.register(VacationEvent) 
class VacationEventAdmin(admin.ModelAdmin): 
    inlines = [] 
    list_display = ('id', 'user', 'holiday_name', 'start_date', 'end_date', 'process_fba', 'process_fbm', 'process_walmart', 'process_ebay') 
    list_filter = ['process_fba', 'process_fbm', 'process_walmart', 'process_ebay', 'status',] 
    search_fields = ['holiday_name', 'user__username'] 

# if VacationEvent.process_fba and VacationEvent.has_amazon_fba_vacation: 
#  inlines.append(FBAInline) 

# try: 
#  getattr(VacationEvent, 'process_fba') 
# except AttributeError: 
#  print "doesn't" 
# else: 
#  inlines.append(FBAInline) 

私はATTRを取得しようとしたが、管理者のためのフィールド値を比較する方法understantはありません。助けてくれてありがとう。

答えて

1

オーバーライドget_formsets_with_inlines方法

get_formsets_with_inlines(self, request, obj=None): 
    for inline in self.get_inline_instances(request, obj): 
     if obj and obj.has_amazon_fba_vacation: 
      yield inline.get_formset(request, obj), inline 
関連する問題