Форум сайта python.su
Добрый день!
Есть модели
..... class Player (models.Model): family = models.CharField(max_length=20, verbose_name='фамилия') name = models.CharField(blank=True, max_length=20, verbose_name='имя') date_rojd = models.DateField(blank=True, null=True, verbose_name='дата рождения') positions = models.ForeignKey(Position, verbose_name='позиция',blank=True, null=True) kommand = models.ForeignKey(Komanda, verbose_name='команда') class Matches (models.Model): data = models.DateField(verbose_name='дата') time = models.TimeField(verbose_name='время начала') home = models.ForeignKey(Komanda, verbose_name='хозяева') guest = models.ForeignKey(Komanda, related_name='guest', verbose_name='гости') reffery = models.ForeignKey(Refery, verbose_name='судья') tur = models.ForeignKey(Tury, verbose_name='Тур', blank=True, null=True) goal_h = models.IntegerField(null=True, blank=True, verbose_name='голы хозяева') goal_g = models.IntegerField(null=True, blank=True, verbose_name='голы гости') class Statistika (models.Model): match = models.ForeignKey(Matches,verbose_name='матч') igrok = models.ForeignKey(Player, verbose_name='игрок') event = models.ForeignKey(Events,verbose_name='событие') kvo = models.IntegerField(verbose_name='количество') ....
.... class StatsInline (admin.TabularInline): model = Statistika extra = 1 class MatchesAdmin (admin.ModelAdmin): list_display = ('tur', 'data', 'time', 'home', 'guest', 'goal_h', 'goal_g', 'reffery') inlines = [StatsInline] ....
Отредактировано tol_drew (Сен. 24, 2014 15:42:19)
Офлайн
Неужели никто помочь не может, я не думаю, что это сложно, но никак не получается
Офлайн
Для начала ты должен создать форму для отображения для StatsInline. Допустим как то так:
class Stat(forms.ModelForm): match = forms.ModelChoiceField(queryset=Matches.objects.all()) igrok = forms.ModelChoiceField(queryset=Player.objects.filter(name='a')) event = models.ModelChoiceField(queryset=Events.objects.all()) kvo = forms.IntegerField() class Meta: model = Statistika
class StatsInline (admin.TabularInline): model = Statistika form = Stat extra = 1
Отредактировано DayFan (Сен. 26, 2014 16:23:47)
Офлайн
Спасибо большое
Офлайн
Нашел другое решение без создания формы. В admin.py внес изменения:
class StatsInline (admin.TabularInline): model = Statistika extra = 1 class MatchesAdmin (admin.ModelAdmin): list_display = ('tur', 'data', 'time', 'home', 'guest', 'goal_h', 'goal_g', 'reffery') inlines = [StatsInline] def change_view(self, request, object_id, extra_context=None): def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == 'igrok': hozyaeva = Komanda.objects.get(nazvanie=Matches.objects.get(id=object_id).home).id gosti = Komanda.objects.get(nazvanie=Matches.objects.get(id=object_id).guest).id kwargs['queryset'] = Player.objects.filter(kommand__in=[hozyaeva, gosti]) return super(StatsInline, self).formfield_for_foreignkey(db_field, request, **kwargs) StatsInline.formfield_for_foreignkey = formfield_for_foreignkey self.inline_instances = [StatsInline(self.model, self.admin_site)] return super(MatchesAdmin, self).change_view(request, object_id, extra_context=extra_context)
Офлайн