Форум сайта python.su
Имеется такая модель:
...
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
...
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',]
Офлайн
Может, всё таки, кто-нибудь сталкивался?
Офлайн
MutagenaПопробуйте categories определить в __init__ формы.
Может, всё таки, кто-нибудь сталкивался?
self.fields['categories'] = forms.ModelMultipleChoiceField(queryset=, widget=forms.CheckboxSelectMultiple)
Отредактировано (Фев. 18, 2010 09:56:14)
Офлайн
regall, так проблема в том, что нужно переопределить только одно свойство widget, а остальное взять у родителя.
Офлайн
Тогда в __init__ формы:
self.fields['categories'].widget = forms.CheckboxSelectMultiple
Отредактировано (Фев. 18, 2010 21:02:49)
Офлайн
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)
Офлайн
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)))
Офлайн
Вы же не показали модель Category, я привёл пример как это делается, фильтрация полей по определённым критериям. А в вашей модели UsersCategory я вообще смысла не вижу, может вы расскажите зачем она и как работает (на простых запросах).
Офлайн
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
Офлайн