Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 13, 2010 17:30:31

dr0n
От:
Зарегистрирован: 2010-12-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Django ORM need help

Вобщем нужно на джанге по уму сделать вот такой запрос

http://s1.ipicture.ru/Gallery/Viewfull/2586463.html

SELECT
*
FROM
ip_groups
INNER JOIN users
ON ip_groups.ip_group_id = users.id
INNER JOIN payment_transactions
ON payment_transactions.account_id = users.id
WHERE
users.login = 'marina'
база готовая и изменению не подлежит (readonly)

пока работает такой костыль для выбирания айпи
 if 'login' in request.GET and request.GET['login']:
login = request.GET['login']
users = Users.objects.filter(login=login).extra(select={'cdate': 'SELECT FROM_UNIXTIME(create_date)'})
if not users:
return show_notfound('Not found user with login \"%s\"' % login)
else:
iplist=[]
for u in users:
ip = IpGroups.objects.extra(select={'ipa': "inet_ntoa(ip & 0xFFFFFFFF)"}).filter(ip_group_id=u.id,is_deleted=0)
iplist.append(ip)
return render_to_response('results.html',
{'users': users, 'iplist': iplist[0], 'query': login, 'ip_address': request.META['REMOTE_ADDR'], },
context_instance=RequestContext(request))
модель использую без foreignkey так как не пойму как связать поля



Офлайн

#2 Дек. 16, 2010 09:45:39

maxwell
От:
Зарегистрирован: 2008-08-26
Сообщения: 111
Репутация: +  0  -
Профиль   Отправить e-mail  

Django ORM need help

Как вариант:
http://docs.djangoproject.com/en/dev/topics/db/sql/

Но почему бы не:

class IpGroups(models.Model):
user = models.ForeignKey(User)
...

IP_list = IpGroups.objects.filter(user = user)
М?



Офлайн

#3 Дек. 16, 2010 12:11:55

dr0n
От:
Зарегистрирован: 2010-12-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Django ORM need help

попробовал, вот результат

root@homepc:/var/www/django/spectr_ajax# ./manage.py shell
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from spectr_ajax.main.models import Users
>>> from spectr_ajax.main.models import IpGroups
>>> ip = IpGroups.objects.filter(user = 4)
>>> ip
...
OperationalError: (1054, "Unknown column 'ip_groups.user_id' in 'field list'")



Офлайн

#4 Дек. 16, 2010 12:21:44

dr0n
От:
Зарегистрирован: 2010-12-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Django ORM need help

вот эти таблицы в models.py

class Users(models.Model):                                                                                                                                   
id = models.IntegerField(primary_key=True)
login = models.CharField(max_length=765, blank=True)
password = models.CharField(max_length=765, blank=True)
basic_account = models.IntegerField(null=True, blank=True)
is_blocked = models.IntegerField(null=True, blank=True)
discount_period_id = models.IntegerField(null=True, blank=True)
advance_payment = models.IntegerField(null=True, blank=True)
create_date = models.IntegerField(null=True, blank=True)
last_change_date = models.IntegerField(null=True, blank=True)
who_create = models.IntegerField(null=True, blank=True)
who_change = models.IntegerField(null=True, blank=True)
is_juridical = models.IntegerField(null=True, blank=True)
full_name = models.TextField(blank=True)
juridical_address = models.TextField(blank=True)
actual_address = models.TextField(blank=True)
work_telephone = models.CharField(max_length=765, blank=True)
home_telephone = models.CharField(max_length=765, blank=True)
mobile_telephone = models.CharField(max_length=765, blank=True)
web_page = models.CharField(max_length=765, blank=True)
icq_number = models.CharField(max_length=765, blank=True)
tax_number = models.CharField(max_length=765, blank=True)
kpp_number = models.CharField(max_length=765, blank=True)
bank_id = models.IntegerField(null=True, blank=True)
bank_account = models.CharField(max_length=765, blank=True)
email = models.CharField(max_length=765, blank=True)
house_id = models.IntegerField(null=True, blank=True)
flat_number = models.CharField(max_length=765, blank=True)
entrance = models.CharField(max_length=765, blank=True)
floor = models.CharField(max_length=765, blank=True)
district = models.CharField(max_length=765, blank=True)
building = models.CharField(max_length=765, blank=True)
passport = models.CharField(max_length=765, blank=True)
comments = models.TextField(blank=True)
personal_manager = models.CharField(max_length=765, blank=True)
connect_date = models.IntegerField(null=True, blank=True)
remote_switch_id = models.IntegerField(null=True, blank=True)
port_number = models.IntegerField(null=True, blank=True)
personal_currency_coef = models.FloatField(null=True, blank=True)
binded_currency_code = models.IntegerField(null=True, blank=True)
is_deleted = models.IntegerField(null=True, blank=True)
is_send_invoice = models.IntegerField(null=True, blank=True)
def __unicode__(self):
return self.id
class Meta:
db_table = u'users'

class IpGroups(models.Model):
user = models.ForeignKey(Users)
id = models.IntegerField(primary_key=False)
ip_group_id = models.IntegerField(primary_key=False)
ip = models.IntegerField(null=True, blank=True)
mask = models.IntegerField(null=True, blank=True)
uname = models.CharField(max_length=192, blank=True)
upass = models.CharField(max_length=192, blank=True)
mac = models.CharField(max_length=96, blank=True)
allowed_cid = models.CharField(max_length=96, blank=True)
ip_type = models.IntegerField(null=True, blank=True)
router_id = models.IntegerField(null=True, blank=True)
create_date = models.IntegerField(null=True, blank=True)
delete_date = models.IntegerField(null=True, blank=True)
is_deleted = models.IntegerField(null=True, blank=True)
def __unicode__(self):
return self.id
class Meta:
db_table = u'ip_groups'



Отредактировано (Дек. 16, 2010 12:22:32)

Офлайн

#5 Дек. 16, 2010 12:32:04

maxwell
От:
Зарегистрирован: 2008-08-26
Сообщения: 111
Репутация: +  0  -
Профиль   Отправить e-mail  

Django ORM need help

dr0n, А syncdb делали после ForeignKey?



Офлайн

#6 Дек. 16, 2010 12:37:47

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Django ORM need help

1. / извините, не досмотрел/
2. У Вас кошмарно перегруженные модели.
3. Для булевых значений (is_deleted) есть булевые типы поля (http://docs.djangoproject.com/en/1.2/ref/models/fields/#booleanfield). Для многих полей тоже есть соответствующие типы. Поверьте, они удобней чем везде всё пихать в CharField.
4. Возможно Вам стоит использовать джанговский auth с профалом, а не педалить свой велосипед?
Или такая структура поверх существующей пишется?

Отредактировано (Дек. 16, 2010 12:38:37)

Офлайн

#7 Дек. 16, 2010 12:38:30

dr0n
От:
Зарегистрирован: 2010-12-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Django ORM need help

нет не делал, и я же вроде бы писал что база readonly…



Офлайн

#8 Дек. 16, 2010 12:39:18

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Django ORM need help

Я, кстати, этого тоже не заметил.

Офлайн

#9 Дек. 16, 2010 12:40:05

dr0n
От:
Зарегистрирован: 2010-12-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Django ORM need help

это база биллинга утм5
только чтение,
нужно поделать различные выборки и на веб-интерфейс
модели я делал через inspectdb



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version