Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.02.2019
Сообщений: 6

Выборка данных не для рендеринга

11.06.2019, 21:49. Показов 901. Ответов 6
Метки orm (Все метки)

Студворк — интернет-сервис помощи студентам
Есть калсс Bom с полем components у которого m2m отношения на QuantityComponent. Задача, достать значения поля count объектов класса Component, которые связаны с объектом QuantityComponent, котрый, в свою очередь, связан с Bom.
Предполагаю, что это лучше делать на уровне модели или формы.
То есть я говорю программе "Покажи мне список компонентов для Bom_1 в котором будет и их количество" Данные нужны не для рендеринга!!!!
После обработки данные над записать в TrashComponents
Помогите пожалуйста, застрял - жесть... Может предложите другое решение?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
class Component(models.Model):#Blog
    ACTION = (
        (0, 'Minus'),
        (1, 'Plus'),
        )
    name = models.CharField(max_length=100, verbose_name = 'Name')
    analog = models.ForeignKey("Component", on_delete=models.CASCADE, null=True, blank=True)
    number = models.IntegerField()
    article = models.CharField(max_length=100, verbose_name='Артикул', null=True, blank=True)
    count = models.IntegerField(verbose_name="Количество на складе", null=True)
    date_register = models.DateTimeField('date_create', null=True)
    package = models.ForeignKey("Package", on_delete=models.CASCADE, null=True, blank=True)
    box = models.ForeignKey(Box, on_delete=models.CASCADE, null=True, blank=True)
    # storage = models.ForeignKey(Storage, on_delete=models.CASCADE, null=True, blank=True)
    # unpuking = models.ForeignKey('UnPuking', on_delete=models.CASCADE, null=True, blank=True)
    counting = models.ForeignKey('Counting', on_delete=models.CASCADE, null=True, blank=True, verbose_name = 'Дата последнего поступлениея на склад')
    #value = models.ForeignKey("Values", on_delete=models.CASCADE, null=True, blank=True)
    type_ditail = models.ForeignKey("Type", on_delete=models.CASCADE, null=True, blank=True, verbose_name = 'Тип')
    unit = models.ForeignKey("Unit", on_delete=models.CASCADE, null=True, verbose_name = 'Единица измерения')
    action = models.IntegerField(choices = ACTION, null=True)
    number_action = models.IntegerField(null = True)
    
 
    def mycount(self):
        return '{0}'.format(self.count)
 
 
    def __str__(self):
        return "{0} | {1} ".format(self.number, self.name)
 
class Bom(models.Model):
    """Комплектация для сборки"""
    name = models.CharField(max_length=100)
    # number = models.CharField(max_length=50)
    components = models.ManyToManyField("QuantityComponent")
 
class QuantityComponent(models.Model): #подсчитанные компоненты к прибору
    """Класс в котором к каждому компоненту присваивется количество."""
    part_number = models.ForeignKey(Component, on_delete=models.CASCADE)
    quantity = models.IntegerField('quantity', null=True, blank=True)
 
    def complit(self):
        count = self.part_number.count
        return count
 
    def number(self):
        num = self.part_number.number
        return num
 
class TrashComponents(models.Model):
    data = models.DateTimeField('date_create', auto_now_add=True, blank=True)
    user = models.ForeignKey('user', on_delete=models.CASCADE)
    write_off_group_ditail = models.ForeignKey('bom', on_delete=models.CASCADE, blank=True, null = True)
    count_group_detail = models.IntegerField( blank=True, null = True)
 
    def __str__(self):
        return '{0}'.format(self.write_off_group_ditail)
 
def forma(request):
    if request.method == 'POST':
        form = TrashComponentsForm(request.POST)
        context = {}
        if form.is_valid():
            context['device'] = form.cleaned_data['write_off_group_ditail']
            context['count'] = form.cleaned_data['count_group_detail'] 
            mnoj = form.cleaned_data['count_group_detail']
            groupcomponents_id = Bom.objects.get(name=context['device'])#Нельзя нзывать одинаково производимые девайсы
 
            #покажи все QuantityComponents у которого имя Bom которое приходит из формы.
            #QuantityComponent это пара "" компонент и его количество ""
            quantityGroup = QuantityComponent.objects.filter(bom__id__contains = groupcomponents_id.id)
            context['count_quantity_group'] = quantityGroup.count()#возвращает количество записей
            if  context['device'] == None or context['count'] == None:
                form = TrashComponentsForm()
                return render(request, 'choice_form.html', {'myforma':form})
            
            #Основные хранилища
            sklad = []       # на склде до списывания
            mnoj_result = [] # то, сколько будет нужно списать
            balance = []     # вывод результата до списывания
            save_total_balance = []
            for qGroup in quantityGroup:
                mnoj_result.append(qGroup.quantity * mnoj)
 
            for q in quantityGroup:
                sklad.append(q.part_number.count)
            
            pre_balance = zip(sklad, mnoj_result)   
            for x, y in pre_balance:
                balance.append(x - y)
            context['full'] = zip(quantityGroup, mnoj_result, balance)
            context['write_of_forma'] = form
            
            if 'write_off' in request.POST:
                form = TrashComponentsForm(request.POST)
                if form.is_valid():
                    forma_write_off = form.save(commit = False)
                    device = form['write_off_group_ditail']
                    quantity_list = QuantityComponent.objects.all()#возьми все детали пары "имя/количество"" для инстанса Bom
                    # for component in quantity_list: #QuantityComponent'ы ПАРЫ ОБЪЕКТЫ
                    y = [q.part_number for q in quantity_list]
                    # quantity_list_2 = Component.objects.filter(quantitycomponent__part_number = y[2] )
 
 
                                        # выдает последний элемент цикла, а хотелось бы получить список объектов qs
                    for qc_object in quantity_list:
                        qc_object
 
                    forma_write_off.save()
                    context['component_list'] = quantity_list
                    context['component_2'] = qc_object
            return render(request, 'count_center.html', context)
    else:
        form = TrashComponentsForm()
    return render(request, 'choice_form.html', {'myforma':form})

Ну и форму кину....

Python
1
2
3
4
5
6
class TrashComponentsForm(forms.ModelForm):
    
    class Meta:
        model = models.TrashComponents
        # fields = ("__all__")
        fields = ['user', 'count_group_detail', 'write_off_group_ditail']
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.06.2019, 21:49
Ответы с готовыми решениями:

Скорость выполнения рендеринга. Поиск быстродейственного алгоритма рендеринга объектов
Есть такой вот класс: class Text : public GUI//Класс, выводящий текст { private: static Text** Stor;//Хранит в себе поинтеры на...

Выборка данных из нескольких таблиц. Аналитическая выборка данных
16 Для каждого отдела выбрать отношение зарплаты и комиссионных сотрудников отдела к объему продаж отдела. 17 *Выбрать список штатов в...

Выборка данных для отчета
Здравствуйте. Требуется сделать выборку данных для формирования отчета (приложение на Делфи, СУБД MS Server). База данных выпускников...

6
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
13.06.2019, 01:01
Python
1
bom.components__part_number__count
0
0 / 0 / 0
Регистрация: 10.02.2019
Сообщений: 6
13.06.2019, 08:00  [ТС]
Спасибо большое, совсем забыл про расширение цепочки фильтров.
Python
1
count_data = Component.objects.filter(quantitycomponent__bom__name = 'DEVICE_1')
Спасибо большое, совсем забыл про расширение цепочки фильтров.
Сделал так. Получил все (QSы) компоненты для DEVICE_1.

но потом, когда я итерирую,QS

Python
1
2
                    for count_data in count_data:
                        count_data.count
я получаю последний элемент QSа, а мне нужны значения count всех component. Если что-то не догоняю, сильно не пинайте.
Помогите пожалуйста.
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
13.06.2019, 23:50
Python
1
2
for c in count_data:
    print(c)
0
0 / 0 / 0
Регистрация: 10.02.2019
Сообщений: 6
14.06.2019, 01:17  [ТС]
Python
1
2
3
                for count_data in count_data:
                        count_data
                context['count_data'] = count_data
В контекст выдает только последний элемент итерации.
Если пытаюсь итерировать в шаблоне, то ругается - 'Component' object is not iterable.
Миниатюры
Выборка данных не для рендеринга   Выборка данных не для рендеринга  
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
14.06.2019, 10:32
Nasmel, вас не смущают названиях переменных?
0
0 / 0 / 0
Регистрация: 10.02.2019
Сообщений: 6
14.06.2019, 21:31  [ТС]
Спасибо Вам.

Вот решение.
Python
1
count_data = Component.objects.filter(quantitycomponent__bom__name = 'DEVICE_1').values_list('count', flat=True)
Скажите пожалуйста, а что с переменными?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.06.2019, 21:31
Помогаю со студенческими работами здесь

Сборка Для Рендеринга
Нужно собрать Системник До 30к Для создания анимационных мультиков, чисто для рендеринга, записи звука , и монтажа в Cinema 4d ,Audacity,...

Мощный ПК для рендеринга
работаю в Sony Vegas 1) Буду брать i7, лучше 1151 говорят, верно? например Intel Core i7-6700K 2) R9 380 4096MB GDDR5 (256bit)...

ПК для игр и рендеринга
Бюджет: 1500-1600р/800-850$ Беларусь, Минск Магазины: socket.by, sli.by Материнская плата: Gigabyte GA-B250M-D2V (rev. 1.0) ...

ПК для 3d max и рендеринга
Всем доброго времени суток. Собрали мне на заказ компьтер для 3д графики, сегодня попробовала на нём работать, но что-то не так. Шумит,...

Системник для 3D-рендеринга и моделирования
Всем Доброго времени суток, помогите собрать Пк для 3D Рендеринга и моделирования до 70 т.р. (только блок с корпусом). Хотелось бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru