2015-02-03 4 views
0

У меня есть модель команды и модель персонала (за исключением Team). Каждый объект команды может быть связан с 1 - 10 объектами персонала.Проверка на Django-admin на иностранном объекте

В каждом штатном объекте есть булево поле, указывающее, является ли он координатором команды.

Как я могу, на странице администратора django, следить, чтобы пользователи admin вводили информацию о команде, а также соответствующую информацию о персонале (inline), он должен выбрать хотя бы одного координатора команды (все сотрудники в команде координатор, но не может быть нулевым из них).

Благодарим за предложение.

models.py

class Team(models.Model): 
team_id = models.AutoField(primary_key=True, verbose_name='Team ID') 
team_name = models.CharField(max_length=100, verbose_name='Team Name') 
def __str__(self): 
    return self.team_name 
class Meta: 
    verbose_name='Team' 

class Staff(models.Model): 
    staff_id = models.AutoField(primary_key=True) 
    team_id = models.ForeignKey(Team) 
    staff_name = models.CharField(max_length=100, verbose_name='Staff Name') 
    is_team_coord = models.BooleanField(verbose_name='Is Team Coordinator', default=False) 
    def __str__(self): 
     return self.staff_name 
    class Meta: 
     verbose_name='Staff' 

admin.py

class StaffInLine(admin.TabularInline): 
model = Staff 
def get_max_num(self, request, obj=None, **kwargs): 
    return 10 
def get_min_num(self, request, obj=None, **kwargs): 
    return 1 

class TeamAdmin(admin.ModelAdmin): 
    inlines = [StaffInLine] 

ответ

0

Я нашел ответ сам, ссылаясь на эту ссылку Inline Form Validation in Django

Полное решение:

формы .py

class StaffInLineFormSet(forms.models.BaseInlineFormSet): 
    def clean(self): 
     count = 0 
     for form in self.forms: 
      try: 
       if form.cleaned_data.get('is_team_coord') is True: 
        count += 1 
      except AttributeError: 
       pass 
     if count == 0: 
      raise forms.ValidationError('You must choose at least one Team Coordinator') 

admin.py

class StaffInLine(admin.TabularInline): 
    model = Staff 
    formset = StaffInlineFormSet 
    def get_max_num(self, request, obj=None, **kwargs): 
     return 10 
    def get_min_num(self, request, obj=None, **kwargs): 
     return 1 
Смежные вопросы