Найти - Пользователи
Полная версия: вывод и поиск по foreign key
Начало » Django » вывод и поиск по foreign key
1 2
roach
Застрял в одном месте, подскажите пожалуйста

# models.py
#Заказ
class Order(models.Model):
    title = models.CharField(max_length=100, verbose_name=u"Название",)
#Заказчик
class Customer(models.Model):
    organization = models.CharField(max_length=50, unique=True, verbose_name=u"Организация",)
# Контакты заказчика
class ContactCustomer(models.Model):
    customer = models.ForeignKey(Customer, related_name='contacts', verbose_name=u"Клиент",)
    orders = models.ManyToManyField(Order, blank=True, verbose_name=u"Заказы",)

#views.py:
def ReadOrderView(request):
    orders = Order.objects.all()
   #Заказчик
    customers=[]
    for order in orders:
        empty_contact = ContactCustomer.objects.filter(orders=order.id)[0]
        customers.append(empty_contact.customer)
    print(customers)
 # Поиск
    q = False
    if 'q' in request.GET:
        q = request.GET['q']
        orders = Order.objects.filter(Q(id__icontains=q)|Q(title__icontains=q)) #как сделать поиск заказа по названию организации
    return render(request, 'order_read.html',
               {'orders': orders, 'query':q,
                 'customers':customers,
                }, 
                content_type="text/html")

#template
<form class="form-search" action="/orders/read" method="get">
        <input type="text" class="input-medium search-query" placeholder="поиск" name="q">
        <input type="submit" class="btn" value="найти">
    </form> 
{% if query %} <p>Вы искали: <strong>{{ query }}</strong></p> {% endif %}
<table class="table table-bordered" width="70%">
{% if orders %}
	<tr>
	<th>Название</th>
	<th>Заказчик</th>
	</tr>
	{% for line in orders %}
	<tr class="success" >
 	    <td colspan=2 >
            <a href="/orders/update/{{ line.id }}/">Заказ N {{ line.id }}</a>
            </td>
	</tr>
    <tr>
    <td><a href="/orders/update/{{ line.id }}/">{{ line.title }}</a></td>
    <td>
         {% for customer in customers %}
            <a href="/customers/update/{{ customer.id }}/">{{ customer.organization }}</a>
        {% endfor %}  <!-- # как вывести  название организации текущего заказа?  {{ forloop.counter0 }} ??? -->
    </td>
    </tr>
{% endfor %}
</table>
{% else %}
    <p> По Вашему запросу ничего не найдено </p>
{% endif %}

1) как вывести название организации соответствующему заказу в template использовать {{ forloop.counter0 }} ??
2) как организовать выборку во вьюшке чтобы вести поиск и по названию организации?

Хочу чтобы вывод таблицы был такой:
заказ 1 - название организации 1
заказ 2 - название организации 2

и была возможность поиска по второму столбцу тоже

Заранее спасибо
inoks
roach
#Заказ
class Order(models.Model):
title = models.CharField(max_length=100, verbose_name=u“Название”,)
#Заказчик
class Customer(models.Model):
organization = models.CharField(max_length=50, unique=True, verbose_name=u“Организация”,)
# Контакты заказчика
class ContactCustomer(models.Model):
customer = models.ForeignKey(Customer, related_name='contacts', verbose_name=u“Клиент”,)
orders = models.ManyToManyField(Order, blank=True, verbose_name=u“Заказы”,)

Зачем такая сложная связь???

почему нельзя сделать проще, например так:
#Заказчик
class Customer(models.Model):
    organization = models.CharField()
#Заказ
class Order(models.Model):
    title = models.CharField()
    customer = models.ForeignKey(Customer)
roach

inoks
Дело в том что у Заказчика за Заказы отвечают разные люди, поэтому так и сделано
roach
1) Первый вопрос подсказали, сделал вот так:
#models.py
class Order(models.Model):
    title = models.CharField(max_length= 100, verbose_name= u"Название" ,)
    def get_customer(self):
        return self.contactcustomer_set.all()[0]
#template
{% for order in orders %}
   {{ order.get_customer.customer.organization }}
{% endfor %}

2) Второй подсказали копать в сторону raw https://docs.djangoproject.com/en/dev/topics/db/sql/
Разве одним Q не обойтись?
FishHook
Это глупость какая-то.
return self.contactcustomer_set.all()[0]
Я так понимаю, что в contactcustomer_set.all() все customer одинаковые?
Тогда нафига такая конструкция?
roach
FishHook
Это глупость какая-то.
а как еще?
Берем первый контакт заказа и из него берем Customer
FishHook
roach
а как еще?
roach
Дело в том что у Заказчика за Заказы отвечают разные люди, поэтому так и сделано
То есть в модели ContactCustomer будет еще ответственное лицо заказчика?
roach
FishHook
То есть в модели ContactCustomer будет еще ответственное лицо заказчика?
Да именно так, может быть несколько ответственных.
FishHook
class Product(Model):
    name = CharField(...)
class Contragent(Model):
    name = CharField(...)
    addres = CharField(...)
    phone = CharField(...)
class ConrtagentPerson(Model):
    name = CharField(...)
    second_name = CharField(...)
    phone = CharField(...)
    email = EmailField(...)
    company = ForeignKey(Contragent)
class Order(Model):
    product = ForeignKey(Product)
    person = ForeignKey(ConrtagentPerson)

Так как то, наверное?
roach
В твоем случае, у заказа может быть только 1 контакт, а у меня несколько
Не в моделях дело, FishHook

Мне сейчас поиск нужно организовать по полям вот такой таблицы

order.title | order.description | customer.organization
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB