• Можно ли вызвать Python скрипты из iOS single view app?

    @freeg0r
    .. some dude ..
    Вот тут люди пытаются сделать нечто подобное : https://github.com/tensorflow/swift/blob/master/do...
    Ответ написан
    Комментировать
  • Как поместить XAML элементы в C# массив, чрез цикл?

    FoggyFinder
    @FoggyFinder
    Сложность в реализации связана с выбранным вами подходом. Нужно работать с данными, а не с элементами управления.

    В вашем случае вы ожидаете от пользователя ввод какого-то текста.
    Каждому текстовому полю с правой стороны отвечает одно свойство. Для примера рассмотрим случаи наличия только одного поля для ввода. Назовем его Greeting.

    Для начала определим XAML разметку:

    <TextBox Text="{Binding Greeting, UpdateSourceTrigger=PropertyChanged}"
             TextWrapping="Wrap" />


    UpdateSourceTrigger=PropertyChanged означает что вы хотите изменять свойство Greeting всякий раз когда пользователь меняет что-то в текстовом поле.

    Теперь нужно определить класс который будет отвечать за хранения и обработку данных, назовем его SimpleVM:

    public class SimpleVM : INotifyPropertyChanged
    {
        private string greeting;
    
        public string Greeting
        {
            get { return greeting; }
            set
            {
                greeting = value;
                OnPropertyChanged(nameof(Greeting));
            }
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged([CallerMemberName]string prop = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
        }
    }


    Интерфейс INotifyPropertyChanged необходим для того чтобы оповещать всех интересующихся об изменениях значений в свойстве объекта. В роли интересующегося здесь у нас выступает интерфейс. Всякий раз когда вы будете изменять свойство Greeting графический интерфейс будет обновлять свое представление.

    Осталось отобразить вводимое слово в виде квадратиков. Для этого прекрасно подойдет ItemsControl:

    <ItemsControl Grid.Column="0" ItemsSource="{Binding Greeting}" >
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBox IsReadOnly="True" Text="{Binding .}" 
                         Width="20" Foreground="Black" 
                         BorderThickness="1" BorderBrush="Black" Height="23" 
                         Background="{x:Null}" Margin="1, 3" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>


    И не забываем установить DataContext, для начала можно в конструкторе главного окна:

    public MainWindow()
    {
        InitializeComponent();
        DataContext = new SimpleVM();
    }


    Когда вы станет познакомитесь с MVVM немного больше вы сможете устанавливать контекст снаружи окна (как это обычно и делается).

    А пока результат получается следующим:

    5d36e9309ffef101248000.gif
    Ответ написан
    5 комментариев
  • Можно в admin.py вытащить данные из models.p(из функции __str__)?

    @FulTupFul
    Ну вы же сами используете методы ModelAdmin для отображения. Просто в методе get_work_days верните str(obj)
    Хотя это плохая практика. Правильнее будет написать отдельный метод который вернет вам дни недели.
    В models.py:
    class DriverWorkDay(models.Model):
        ..................
        @property
        def days(self):
            days = []
            if self.monday:
                days.append('понидельник')
            if self.tuesday:
                days.append('вторник')
            if self.wednesday:
                days.append('среда')
            if self.thursday:
                days.append('чтверг')
            if self.friday:
                days.append('пятница')
            if self.saturday:
                days.append('суббота')
            if self.sunday:
                days.append('воскресенье')
            days = ', '.join([str(x) for x in days])
            time = f'(С {self.time_from} по {self.time_to})'
            return f'({self.driver.user.last_name} {self.driver.user.first_name} -- {days}, {time})'

    В admin.py:
    class DriverWorkDayAdmin(admin.ModelAdmin):
        list_display = ('driver', 'get_work_days', 'get_times')
        
        def get_work_days(self, obj):
            return obj.days
        
        ............
    Ответ написан
    1 комментарий