Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Проблема с переопределением виджета в формах [RSS Feed]

#1 Фев. 17, 2010 09:19:40

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с переопределением виджета в формах

Имеется такая модель:

...
class SiteCategory(models.Model):
freelance_site = models.ForeignKey(FreelanceSite)
site_category = models.CharField(max_length=70)

def __unicode__(self):
return self.site_category

class UsersCategory(models.Model):
user = models.ForeignKey(User)
categories = models.ManyToManyField(Category, verbose_name='Категории')

def __unicode__(self):
return self.user.username
...
Делаю форму для того, чтобы юзер мог настраивать categories в UsersCategory.
Нужно, чтобы отображался не стандартный виджет SelectMultiple, а CheckBoxSelectMultiple.
Возможно ли это сделать?
Возникает проблема, как сформировать queryset, ведь нужно выбирать запись для определённого пользователя.
from django.forms import ModelForm
from django import forms
from web.models import *

class CategoryForm(ModelForm):
categories = forms.ModelMultipleChoiceField(queryset=, widget=forms.CheckboxSelectMultiple)
class Meta:
model = UsersCategory
exclude = ['user',]
Может быть, можно переопределить только некоторые свойства categories? Так чтобы переопределить только виджет. Как это сделать? В документации этого нет, там только описано как переопределять поле полностью.



Офлайн

#2 Фев. 17, 2010 20:31:50

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с переопределением виджета в формах

Может, всё таки, кто-нибудь сталкивался?



Офлайн

#3 Фев. 18, 2010 09:56:00

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Проблема с переопределением виджета в формах

Mutagena
Может, всё таки, кто-нибудь сталкивался?
Попробуйте categories определить в __init__ формы.
self.fields['categories'] = forms.ModelMultipleChoiceField(queryset=, widget=forms.CheckboxSelectMultiple)



Отредактировано (Фев. 18, 2010 09:56:14)

Офлайн

#4 Фев. 18, 2010 20:43:36

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с переопределением виджета в формах

regall, так проблема в том, что нужно переопределить только одно свойство widget, а остальное взять у родителя.



Офлайн

#5 Фев. 18, 2010 21:02:30

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Проблема с переопределением виджета в формах

Тогда в __init__ формы:

self.fields['categories'].widget = forms.CheckboxSelectMultiple



Отредактировано (Фев. 18, 2010 21:02:49)

Офлайн

#6 Фев. 18, 2010 21:46:56

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с переопределением виджета в формах

Mutagena
Возникает проблема, как сформировать queryset, ведь нужно выбирать запись для определённого пользователя.
class CategoryForm(ModelForm):
categories = forms.ModelMultipleChoiceField(queryset=Category.objects.none(), widget=forms.CheckboxSelectMultiple)

class Meta:
model = UsersCategory
exclude = ['user',]

def __init__(self, user, *args, **kwargs):
super(CategoryForm, self).__init__(*args, **kwargs)
#
self.fields['categories'].queryset = Category.objects.filter(user=user)
...

form = CategoryForm(request.user, request.POST)
...



Отредактировано (Фев. 18, 2010 21:48:37)

Офлайн

#7 Фев. 18, 2010 22:05:55

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с переопределением виджета в формах

poltergeist получаю ошибку:
Cannot resolve keyword ‘user’ into field. Choices are: category, id, project, site_category, userscategory

вот трейсбек:
Traceback:
File “C:\Python26\lib\site-packages\django\core\handlers\base.py” in get_response
92. response = callback(request, *callback_args, **callback_kwargs)
File “C:\Documents and Settings\Istergul\workspace\freeparse\..\freeparse\web\views.py” in setcat
87. form = CategoryForm(request.user, request.POST)
File “C:\Documents and Settings\Istergul\workspace\freeparse\web\forms.py” in __init__
15. self.fields.queryset = Category.objects.filter(user=user)
File “C:\Python26\lib\site-packages\django\db\models\manager.py” in filter
129. return self.get_query_set().filter(*args, **kwargs)
File “C:\Python26\lib\site-packages\django\db\models\query.py” in filter
498. return self._filter_or_exclude(False, *args, **kwargs)
File “C:\Python26\lib\site-packages\django\db\models\query.py” in _filter_or_exclude
516. clone.query.add_q(Q(*args, **kwargs))
File “C:\Python26\lib\site-packages\django\db\models\sql\query.py” in add_q
1675. can_reuse=used_aliases)
File “C:\Python26\lib\site-packages\django\db\models\sql\query.py” in add_filter
1569. negate=negate, process_extras=process_extras)
File “C:\Python26\lib\site-packages\django\db\models\sql\query.py” in setup_joins
1737. “Choices are: %s” % (name, “, ”.join(names)))



Офлайн

#8 Фев. 18, 2010 23:45:24

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с переопределением виджета в формах

Вы же не показали модель Category, я привёл пример как это делается, фильтрация полей по определённым критериям. А в вашей модели UsersCategory я вообще смысла не вижу, может вы расскажите зачем она и как работает (на простых запросах).



Офлайн

#9 Фев. 19, 2010 12:45:54

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с переопределением виджета в формах

poltergeist, вот модель:

class FreelanceSite(models.Model):
name = models.CharField(max_length=50)
url = models.URLField(unique=True)
description = models.TextField()
rss_feed = models.URLField(unique=True)
favicon = models.ImageField(upload_to='favicons/')

def __unicode__(self):
return self.name

class SiteCategory(models.Model):
freelance_site = models.ForeignKey(FreelanceSite)
site_category = models.CharField(max_length=70)

def __unicode__(self):
return self.site_category

class Category(models.Model):
site_category = models.ManyToManyField(SiteCategory)
category = models.CharField(max_length=70)

def __unicode__(self):
return self.category

class Project(models.Model):
title = models.CharField(max_length=200)
link = models.URLField()
description = models.TextField()
category = models.ForeignKey(Category)
pub_date = models.DateTimeField()
freelance_site = models.ForeignKey(FreelanceSite)

def __unicode__(self):
return self.title

class UsersCategory(models.Model):
user = models.ForeignKey(User)
categories = models.ManyToManyField(Category, verbose_name='Категории')

def __unicode__(self):
return self.user.username
Модель UsersCategory нужна для того, чтобы определённому пользователю соответствовал список выбранных им категорий, чтобы пользователь мог редактировать список, имея перед глазами все доступные категории.



Офлайн

  • Начало
  • » Django
  • » Проблема с переопределением виджета в формах[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version