many to many
This commit is contained in:
parent
463e7451fb
commit
b118fb7124
|
@ -1,6 +1,7 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from .models import TgItem, TmcElement
|
from .models import TgItem, TmcElement, TmcField
|
||||||
|
|
||||||
# Register your models here.
|
# Register your models here.
|
||||||
admin.site.register(TgItem)
|
admin.site.register(TgItem)
|
||||||
admin.site.register(TmcElement)
|
admin.site.register(TmcElement)
|
||||||
|
admin.site.register(TmcField)
|
|
@ -57,7 +57,7 @@ class TgBotUpdater:
|
||||||
await TgBot.app.process_update(item)
|
await TgBot.app.process_update(item)
|
||||||
TgBotUpdater.my_queue.task_done()
|
TgBotUpdater.my_queue.task_done()
|
||||||
|
|
||||||
await asyncio.sleep(3)
|
await asyncio.sleep(1)
|
||||||
|
|
||||||
async def main(self):
|
async def main(self):
|
||||||
await asyncio.gather(
|
await asyncio.gather(
|
||||||
|
|
|
@ -15,10 +15,15 @@ def group_based_upload_to(instance, filename):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TmcField(models.Model):
|
||||||
|
field = models.ForeignKey(BaseCustomField, models.RESTRICT)
|
||||||
|
text = models.CharField(null=True, blank=True)
|
||||||
|
|
||||||
|
|
||||||
class TmcElement(models.Model):
|
class TmcElement(models.Model):
|
||||||
tmc = models.ForeignKey(CustomTable, models.RESTRICT)
|
tmc = models.ForeignKey(CustomTable, models.RESTRICT)
|
||||||
name = models.CharField(null=True, blank=True)
|
name = models.CharField(null=True, blank=True)
|
||||||
element = models.ManyToManyField(BaseCustomField)
|
field = models.ManyToManyField(TmcField)
|
||||||
|
|
||||||
|
|
||||||
class TgItem(models.Model):
|
class TgItem(models.Model):
|
||||||
|
|
|
@ -28,7 +28,7 @@ from telegram.constants import ParseMode
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from .apps import TgBotUpdater
|
from .apps import TgBotUpdater
|
||||||
from .models import TmcElement, TgItem
|
from .models import TgItem, TmcElement, TmcField
|
||||||
from tmc.models import CustomTable, BaseCustomField
|
from tmc.models import CustomTable, BaseCustomField
|
||||||
|
|
||||||
|
|
||||||
|
@ -161,9 +161,10 @@ class TgBot:
|
||||||
field_id = query.data.split("@")[-1]
|
field_id = query.data.split("@")[-1]
|
||||||
field = await BaseCustomField.objects.aget(id=field_id)
|
field = await BaseCustomField.objects.aget(id=field_id)
|
||||||
|
|
||||||
await tmc.element.aadd(field)
|
tmc_field = await TmcField.objects.acreate(field=field)
|
||||||
|
tmc.field.aadd(field)
|
||||||
|
|
||||||
context.chat_data["element"] = field.id
|
context.chat_data["element"] = tmc_field.id
|
||||||
context.chat_data["step"] = "add_element"
|
context.chat_data["step"] = "add_element"
|
||||||
|
|
||||||
await self.inv(update, context)
|
await self.inv(update, context)
|
||||||
|
@ -267,16 +268,17 @@ class TgBot:
|
||||||
elif current_step == "add_element":
|
elif current_step == "add_element":
|
||||||
inv = await TgItem.objects.aget(id=context.chat_data["inv"])
|
inv = await TgItem.objects.aget(id=context.chat_data["inv"])
|
||||||
tmc = await inv.tmc.aget(id=context.chat_data["tmc"])
|
tmc = await inv.tmc.aget(id=context.chat_data["tmc"])
|
||||||
element = await tmc.element.aget(id=context.chat_data["element"])
|
logger.info(context.chat_data["element"])
|
||||||
|
element = await TmcField.objects.aget(id=context.chat_data["element"])
|
||||||
|
field = await BaseCustomField.objects.aget(id=element.field_id)
|
||||||
|
|
||||||
context.chat_data["step"] = "add_element_data"
|
context.chat_data["step"] = "add_element_data"
|
||||||
|
|
||||||
await update.effective_message.reply_markdown_v2(
|
await update.effective_message.reply_markdown_v2(
|
||||||
(
|
(
|
||||||
f"Инвентаризация `{inv.name}` от `{inv.created_at.strftime('%x')}`\n"
|
f"Инвентаризация `{inv.name}` от `{inv.created_at.strftime('%x')}`\n"
|
||||||
f"Количество ТМЦ {await inv.tmc.acount()}\n\n"
|
f"Количество ТМЦ {await inv.tmc.acount()}\n\n"
|
||||||
f"Название ТМЦ `{tmc.name}`\n"
|
f"Название ТМЦ `{tmc.name}`\n"
|
||||||
f"Элемент `{element.name}`\n"
|
f"Элемент `{field.name}`\n"
|
||||||
f"Загрузите фото или пришлите текст"
|
f"Загрузите фото или пришлите текст"
|
||||||
),
|
),
|
||||||
reply_parameters=ReplyParameters(
|
reply_parameters=ReplyParameters(
|
||||||
|
@ -287,10 +289,11 @@ class TgBot:
|
||||||
elif current_step == "add_element_data":
|
elif current_step == "add_element_data":
|
||||||
inv = await TgItem.objects.aget(id=context.chat_data["inv"])
|
inv = await TgItem.objects.aget(id=context.chat_data["inv"])
|
||||||
tmc = await inv.tmc.aget(id=context.chat_data["tmc"])
|
tmc = await inv.tmc.aget(id=context.chat_data["tmc"])
|
||||||
element = await tmc.element.aget(id=context.chat_data["element"])
|
element = await TmcField.objects.aget(id=context.chat_data["element"])
|
||||||
|
field = await BaseCustomField.objects.aget(id=element.field_id)
|
||||||
|
|
||||||
if update.message.photo:
|
if update.message.photo:
|
||||||
element.photoid = update.message.photo[-1].file_id
|
element.text = update.message.photo[-1].file_id
|
||||||
elif update.message.text:
|
elif update.message.text:
|
||||||
element.text = update.message.text
|
element.text = update.message.text
|
||||||
|
|
||||||
|
@ -301,7 +304,7 @@ class TgBot:
|
||||||
f"Инвентаризация `{inv.name}` от `{inv.created_at.strftime('%x')}`\n"
|
f"Инвентаризация `{inv.name}` от `{inv.created_at.strftime('%x')}`\n"
|
||||||
f"Количество ТМЦ {await inv.tmc.acount()}\n\n"
|
f"Количество ТМЦ {await inv.tmc.acount()}\n\n"
|
||||||
f"Название ТМЦ `{tmc.name}`\n"
|
f"Название ТМЦ `{tmc.name}`\n"
|
||||||
f"Элемент `{element.name}`\n"
|
f"Элемент `{field.name}`\n"
|
||||||
f"Данные загружены"
|
f"Данные загружены"
|
||||||
),
|
),
|
||||||
reply_parameters=ReplyParameters(message_id=update.message.message_id),
|
reply_parameters=ReplyParameters(message_id=update.message.message_id),
|
||||||
|
@ -322,7 +325,7 @@ class TgBot:
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Log the error and send a telegram message to notify the developer."""
|
"""Log the error and send a telegram message to notify the developer."""
|
||||||
# Log the error before we do anything else, so we can see it even if something breaks.
|
# Log the error before we do anything else, so we can see it even if something breaks.
|
||||||
logger.error("Exception while handling an update:", exc_info=context.error)
|
# logger.error("Exception while handling an update:", exc_info=context.error)
|
||||||
|
|
||||||
# traceback.format_exception returns the usual python message about an exception, but as a
|
# traceback.format_exception returns the usual python message about an exception, but as a
|
||||||
# list of strings rather than a single string, so we have to join them together.
|
# list of strings rather than a single string, so we have to join them together.
|
||||||
|
@ -343,4 +346,4 @@ class TgBot:
|
||||||
f"<pre>{html.escape(tb_string)}</pre>"
|
f"<pre>{html.escape(tb_string)}</pre>"
|
||||||
)
|
)
|
||||||
# logger.error(context.error)
|
# logger.error(context.error)
|
||||||
logger.info(f"error in tgbot {context.error}\nReply update")
|
logger.info(f"error in tgbot {context.error}\n{tb_string}\nReply update")
|
||||||
|
|
Loading…
Reference in New Issue