filter
не является редактируемым. Я думаю, что вам нужно получать доступ не к полю, а к объекту модели VariantAttribute
. Верно?VariantAttributeInline
(атрибут form
, если мне не изменяет память). class Characteristic(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='characteristics')
...
class Task(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='tasks')
...
...
import operator
latest_comments_by_category = Project.objects.values_list('id').annotate(
Max('characteristics__comments__created'),
Max('tasks__comments__created'),
)
latest_comments = [
(project_id, max(characteristic_time, task_time))
for project_id, characteristic_time, task_time in latest_comments_by_category
]
projects = [
Projects.objects.get(id=project_id)
for project_id, _ in sorted(latest_comments, key=operator.itemgetter(1), reverse=True)
]
User
+ свою модель Profile
, подключённую через OneToOneField
. В ней можно собирать все необходимые свойства. Что мешает модератору сайта одновременно быть покупателем футболочек? Собственно ничего.is_staff
. Посмотрите django-braces
. Вам достаточно использовать class based views и подключать нужные mixins, - и вы забудете об этих проверках: большая их часть будет выполняться в mixins, а не в бизнес-логике предметной области. Вы можете и свои классы для этого дела написать. TypeSerializer
нигде не вызывается. Откуда Django знает, что вы хотите его использовать?serializator
- ну зачем ужас такой? На русском "сериализатор". На английском "serializer". И никак иначе.class ProjectMiddleware:
def process_request(self, request):
assert hasattr(request, 'user'), (
"The Project middleware "
"requires authentication middleware to be installed. Edit your "
"MIDDLEWARE_CLASSES setting to insert "
"'django.contrib.auth.middleware.AuthenticationMiddleware'. "
"If that doesn't work, ensure your TEMPLATE_CONTEXT_PROCESSORS "
"setting includes 'django.core.context_processors.auth'."
)
if request.user.is_authenticated():
request.project = ...
settings.MIDDLEWARE_CLASSES
. DateTimeField
. grep DateTimeField */migrations/*
по всем миграциям и посмотрите, нет ли там где-нибудь неправильных значений datetime (например, в качестве аргумента default
).models.py
на предмет того же самого.from django.core import validators
price = models.FloatField(..., validators=[validators.MinValueValidator(0.1)])
class MyView(...):
form_class = MyForm
def get_form_kwargs(self, ...): # название метода условно, не уверен, что он так называется в generic views и даже что он есть :)
kwargs = super(MyView, self).get_form_kwargs(...)
kwargs.update({'disabled': not self.request.user.has_perm(...)})
return kwargs
class MyForm(...):
def __init__(self, *args, **kwargs):
is_disabled = kwargs.pop('disabled')
super(MyForm, self).__init__(*args, **kwargs)
if is_disabled:
self.fields['foo'].widget.attrs.update({'disabled': 'disabled'})
url(r'', include('blog.urls')),
url(r'^$', views.index, name='index'),
class ReactorCreateView(PermissionRequiredMixin, CreateView):
permission = 'myapp.create_reactor'
model = AtomicReactor