2016-08-23 2 views
0

Я просто новый, используя Django. Я только что создал свои модели и перенесил информацию в свою базу данных sqlite3 с помощью модуля импорта .cvs. Это мои модули:Создайте запрос для сравнения двух моделей

class Backlog(models.Model): 
    sales_order = models.CharField(max_length=30) 
    po_number = models.CharField(max_length=30) 
    order_number = models.IntegerField(blank=True) 
    line_number = models.IntegerField(blank=True) 
    ship_Set = models.IntegerField(blank=True) 
    product_id = models.CharField(max_length=30) 
    ordered_quantity = models.IntegerField(blank=True) 

class Material(models.Model): 
    product_id = models.CharField(max_length=50) 
    tan_id = models.CharField(max_length=50) 

Теперь, когда у меня есть информация внутри моих таблиц я хочу сделать следующее:

  • Найти если product_id от Backlog в Material «s модели, как только он находит проверьте первые две цифры от tan_id. If is 74 классифицировать как '1', if is 800 классифицировать как '3' еще как '2'. (Формат tan_id обычно является 74-102345-03, 800-120394-03)

Моих два вопроса: Как сделать это, и если я должен создать новый столбец для добавления информации от каждого product_id.

+0

У вас уже есть список отставаний, когда вы пытаетесь решить эту проблему? –

+0

Да, таблица отставания заполнена необходимыми данными. Я просто ищу правильный способ сделать связь и манипулировать данными, чтобы получить желаемый результат. – Deluq

ответ

1

Ok хорошо заданных текущих моделей, здесь возможное решение проблемы, которую вы имеете:

for backlog in Backlog.objects.all(): 
    try: 
     material = Material.objects.get(product_id = backlog.product_id) 
     if material.tan_id[0:2] == '74': 
      # Classify as 1 
     elif material.tan_id[0:2] == '80': 
      # Classify as 3 
     else: 
      # Classify as 2 
    except Material.DoesNotExist: 
     print("This material is not in backlog") 
     continue 

Этот код должен перебираем каждый экземпляр Отставание у вас есть в вашей базе данных, а затем попытаться найти связанный материал. В случае, если он не находит Material (в вашем случае нет backlog), object.get() вызывает исключение, которого оно не существует, мы печатаем его там и продолжаем с циклом. Если это мы классифицируем, как вы указали. Может потребоваться небольшая настройка, но она должна дать вам то, что вы хотите решить эту проблему. Дайте мне знать, если это не так.

+0

Я использовал структуру вашей логики, но в конце я использовал строку .startwith с операторами if, чтобы найти «74», «800». благодаря – Deluq

Смежные вопросы