Форум сайта python.su
Вобщем нужно на джанге по уму сделать вот такой запрос
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'
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))
Офлайн
Как вариант:
http://docs.djangoproject.com/en/dev/topics/db/sql/
Но почему бы не:
class IpGroups(models.Model):
user = models.ForeignKey(User)
...
IP_list = IpGroups.objects.filter(user = user)
Офлайн
попробовал, вот результат
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'")
Офлайн
вот эти таблицы в 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)
Офлайн
dr0n, А syncdb делали после ForeignKey?
Офлайн
1. / извините, не досмотрел/
2. У Вас кошмарно перегруженные модели.
3. Для булевых значений (is_deleted) есть булевые типы поля (http://docs.djangoproject.com/en/1.2/ref/models/fields/#booleanfield). Для многих полей тоже есть соответствующие типы. Поверьте, они удобней чем везде всё пихать в CharField.
4. Возможно Вам стоит использовать джанговский auth с профалом, а не педалить свой велосипед?
Или такая структура поверх существующей пишется?
Отредактировано (Дек. 16, 2010 12:38:37)
Офлайн
нет не делал, и я же вроде бы писал что база readonly…
Офлайн
Я, кстати, этого тоже не заметил.
Офлайн
это база биллинга утм5
только чтение,
нужно поделать различные выборки и на веб-интерфейс
модели я делал через inspectdb
Офлайн