remotes/origin/PR-39
ArturBaybulatov 10 years ago
parent 18f5297911
commit 5205b388ed
  1. 18
      api/views.py
  2. 2
      archilance/settings/base.py
  3. 38
      assets/index.js
  4. 2
      assets/js/chat.js
  5. 17
      chat/filters.py
  6. 16
      common/filters.py
  7. 28
      common/serializers.py
  8. 61
      projects/filters.py
  9. 113
      projects/serializers.py
  10. 10
      reviews/filters.py
  11. 7
      specializations/filters.py
  12. 2
      templates/partials/base.html
  13. 4
      users/filters.py
  14. 3
      users/templates/contractor_profile.html
  15. 3
      work_sell/filters.py

@ -13,7 +13,7 @@ from projects.serializers import (
from projects.filters import ( from projects.filters import (
ProjectFilterSet, RealtyFilterSet, StageFilterSet, PortfolioFilterSet, OrderFilterSet, ProjectFilterSet, RealtyFilterSet, StageFilterSet, PortfolioFilterSet, OrderFilterSet,
PortfolioPhotoFilterSet, PortfolioPhotoFilterSet, AnswerFilterSet,
) )
from specializations.models import Specialization from specializations.models import Specialization
@ -22,7 +22,7 @@ from specializations.filters import SpecializationFilterSet
from users.models import User, ContractorResumeFiles, ContractorResume, Team from users.models import User, ContractorResumeFiles, ContractorResume, Team
from users.serializers import UserSerializer, ContractorResumeFilesSerializer, ContractorResumeSerializer, TeamSerializer from users.serializers import UserSerializer, ContractorResumeFilesSerializer, ContractorResumeSerializer, TeamSerializer
from users.filters import UserFilterSet, ContractorResumeFilesFilterSet, ContractorResumeFilterSet from users.filters import UserFilterSet, TeamFilterSet, ContractorResumeFilesFilterSet, ContractorResumeFilterSet
from common.models import Location from common.models import Location
from common.serializers import LocationSerializer from common.serializers import LocationSerializer
@ -92,6 +92,16 @@ class ProjectViewSet(ModelViewSet):
serializer_class = ProjectSerializer serializer_class = ProjectSerializer
filter_class = ProjectFilterSet filter_class = ProjectFilterSet
def get_queryset(self):
qs = super().get_queryset()
x_no_contractor_answer = self.request.GET.get('x_no_contractor_answer', '')
if x_no_contractor_answer.isdecimal():
qs = qs.exclude(answers__object_id=x_no_contractor_answer, answers__content_type__model='user')
return qs
class NoteViewSet(ModelViewSet): class NoteViewSet(ModelViewSet):
queryset = Notes.objects.all() queryset = Notes.objects.all()
@ -220,10 +230,10 @@ class WorkSellPhotoViewSet(ModelViewSet):
class AnswerViewSet(ModelViewSet): class AnswerViewSet(ModelViewSet):
queryset = Answer.objects.all() queryset = Answer.objects.all()
serializer_class = AnswerSerializer serializer_class = AnswerSerializer
# filter_class = AnswerFilterSet filter_class = AnswerFilterSet
class TeamViewSet(ModelViewSet): class TeamViewSet(ModelViewSet):
queryset = Team.objects.all() queryset = Team.objects.all()
serializer_class = TeamSerializer serializer_class = TeamSerializer
# filter_class = TeamFilterSet filter_class = TeamFilterSet

@ -266,7 +266,7 @@ if DEBUG:
EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend' EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend'
PAGE_SIZE = 10 # Non-api page size (regular views) PAGE_SIZE = 10 # Non-api page size (regular views)
API_PAGE_SIZE = 1000 # Django REST framework API_PAGE_SIZE = 100 # Django REST framework
REST_FRAMEWORK = { REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [ 'DEFAULT_AUTHENTICATION_CLASSES': [

@ -257,30 +257,42 @@ function initContractorSelect($select, excludeIds) {
// Order offer project select --------------------------------------------- // Order offer project select ---------------------------------------------
;(function() {
var projectSelectOptions = { var projectSelectOptions = {
language: 'ru', language: 'ru',
placeholder: 'Выберите проект', // Required by `allowClear` placeholder: 'Выберите проект', // Required by `allowClear`
allowClear: true, allowClear: true,
} }
function initProjectSelect($select, customerId) { function initProjectSelect($select, customerId, contractorId) {
return $.ajax({url: '/api/projects/?state=active&customer=' + customerId, method: 'GET', dataType: 'json'}) var urlObj = new URI('/api/projects/')
.then(function(res) {
urlObj.setQuery({
state: 'active',
customer: customerId,
order__contractor__isnull: true,
order__team__isnull: true,
x_no_contractor_answer: contractorId,
})
return $.get(urlObj.href()).then(function(res) {
var projects = res.results var projects = res.results
$select.select2(_.merge(projectSelectOptions, { $select.select2(_.merge(projectSelectOptions, {
data: _.map(function(project) { data: _.map(function(project) {
return { return {
id: project.id, id: project.id,
text: project.name, //text: project.name,
text: format('%s (%s)', project.name, project.id), // Tmp
origItem: project, origItem: project,
} }
}, projects), }, projects),
})) }))
}) })
} }
window.initProjectSelect = initProjectSelect
}())

@ -1,6 +1,6 @@
var SocketHandler = function () { var SocketHandler = function () {
domain = domain.replace(':' + port, ''); domain = domain.replace(':' + port, '');
var url = 'ws://' + domain + '/chat/' + userId + '/'; var url = 'ws://' + domain + ':8888/chat/' + userId + '/';
var sock = new WebSocket(url); var sock = new WebSocket(url);
var intervalId; var intervalId;
sock.onopen = function () { sock.onopen = function () {

@ -5,6 +5,7 @@ from .models import Message, Notes, Documents
# #
# class DocumentsFilterSet(FilterSet): # class DocumentsFilterSet(FilterSet):
# file = AllLookupsFilter() # file = AllLookupsFilter()
# id = AllLookupsFilter()
# # sender = RelatedFilter('users.filters.UserFilterSet') # # sender = RelatedFilter('users.filters.UserFilterSet')
# # recipent = RelatedFilter('users.filters.UserFilterSet') # # recipent = RelatedFilter('users.filters.UserFilterSet')
# # order = RelatedFilter('projects.filters.OrderFilterSet') # # order = RelatedFilter('projects.filters.OrderFilterSet')
@ -15,13 +16,15 @@ from .models import Message, Notes, Documents
class MessageFilterSet(FilterSet): class MessageFilterSet(FilterSet):
text = AllLookupsFilter()
created = AllLookupsFilter() created = AllLookupsFilter()
sender = RelatedFilter('users.filters.UserFilterSet') id = AllLookupsFilter()
recipent = RelatedFilter('users.filters.UserFilterSet')
private_type = AllLookupsFilter() private_type = AllLookupsFilter()
team = RelatedFilter('users.filters.TeamFilterSet') text = AllLookupsFilter()
order = RelatedFilter('projects.filters.OrderFilterSet') order = RelatedFilter('projects.filters.OrderFilterSet')
recipent = RelatedFilter('users.filters.UserFilterSet')
sender = RelatedFilter('users.filters.UserFilterSet')
team = RelatedFilter('users.filters.TeamFilterSet')
class Meta: class Meta:
model = Message model = Message
@ -39,10 +42,12 @@ class DocumentFilterSet(FilterSet):
class NoteFilterSet(FilterSet): class NoteFilterSet(FilterSet):
text = AllLookupsFilter()
created = AllLookupsFilter() created = AllLookupsFilter()
sender = RelatedFilter('users.filters.UserFilterSet') id = AllLookupsFilter()
text = AllLookupsFilter()
recipent = RelatedFilter('users.filters.UserFilterSet') recipent = RelatedFilter('users.filters.UserFilterSet')
sender = RelatedFilter('users.filters.UserFilterSet')
class Meta: class Meta:
model = Notes model = Notes

@ -1,17 +1,29 @@
from django.contrib.contenttypes.models import ContentType
from rest_framework_filters import FilterSet, AllLookupsFilter, RelatedFilter from rest_framework_filters import FilterSet, AllLookupsFilter, RelatedFilter
from .models import Location from .models import Location
class LocationFilterSet(FilterSet): class LocationFilterSet(FilterSet):
children = RelatedFilter('common.filters.LocationFilterSet')
id = AllLookupsFilter() id = AllLookupsFilter()
level = AllLookupsFilter() level = AllLookupsFilter()
lft = AllLookupsFilter() lft = AllLookupsFilter()
name = AllLookupsFilter() name = AllLookupsFilter()
parent = RelatedFilter('common.filters.LocationFilterSet')
rght = AllLookupsFilter() rght = AllLookupsFilter()
tree_id = AllLookupsFilter() tree_id = AllLookupsFilter()
type = AllLookupsFilter() type = AllLookupsFilter()
children = RelatedFilter('common.filters.LocationFilterSet')
parent = RelatedFilter('common.filters.LocationFilterSet')
class Meta: class Meta:
model = Location model = Location
class ContentTypeFilterSet(FilterSet):
app_label = AllLookupsFilter()
id = AllLookupsFilter()
model = AllLookupsFilter()
class Meta:
model = ContentType

@ -1,3 +1,4 @@
from django.contrib.contenttypes.models import ContentType
from rest_framework.serializers import ModelSerializer from rest_framework.serializers import ModelSerializer
from .models import Location from .models import Location
@ -8,15 +9,15 @@ class NestedLocationSerializer(ModelSerializer):
model = Location model = Location
fields = ( fields = (
'children',
'id', 'id',
'level',
'lft',
'name', 'name',
'children',
'parent', 'parent',
'type',
'lft',
'rght', 'rght',
'level',
'tree_id', 'tree_id',
'type',
) )
@ -28,13 +29,24 @@ class LocationSerializer(ModelSerializer):
model = Location model = Location
fields = ( fields = (
'children',
'id', 'id',
'level',
'lft',
'name', 'name',
'children',
'parent', 'parent',
'type',
'lft',
'rght', 'rght',
'level',
'tree_id', 'tree_id',
'type',
)
class ContentTypeSerializer(ModelSerializer):
class Meta:
model = ContentType
fields = (
'app_label',
'id',
'model',
) )

@ -1,6 +1,16 @@
from rest_framework_filters import FilterSet, RelatedFilter, AllLookupsFilter from rest_framework_filters import FilterSet, RelatedFilter, AllLookupsFilter
from .models import Project, Stage, Order, Realty, BuildingClassfication, ConstructionType, Portfolio, PortfolioPhoto from .models import (
Answer,
BuildingClassfication,
ConstructionType,
Order,
Portfolio,
PortfolioPhoto,
Project,
Realty,
Stage,
)
class BuildingClassficationFilterSet(FilterSet): class BuildingClassficationFilterSet(FilterSet):
@ -26,6 +36,7 @@ class ProjectFilterSet(FilterSet):
cro = AllLookupsFilter() cro = AllLookupsFilter()
currency = AllLookupsFilter() currency = AllLookupsFilter()
deal_type = AllLookupsFilter() deal_type = AllLookupsFilter()
id = AllLookupsFilter()
name = AllLookupsFilter() name = AllLookupsFilter()
price_and_term_required = AllLookupsFilter() price_and_term_required = AllLookupsFilter()
state = AllLookupsFilter() state = AllLookupsFilter()
@ -34,7 +45,9 @@ class ProjectFilterSet(FilterSet):
text = AllLookupsFilter() text = AllLookupsFilter()
work_type = AllLookupsFilter() work_type = AllLookupsFilter()
answers = RelatedFilter('projects.filters.AnswerFilterSet')
customer = RelatedFilter('users.filters.UserFilterSet') customer = RelatedFilter('users.filters.UserFilterSet')
order = RelatedFilter('projects.filters.OrderFilterSet')
realty = RelatedFilter('projects.filters.RealtyFilterSet') realty = RelatedFilter('projects.filters.RealtyFilterSet')
specialization = RelatedFilter('specializations.filters.SpecializationFilterSet') specialization = RelatedFilter('specializations.filters.SpecializationFilterSet')
@ -42,31 +55,58 @@ class ProjectFilterSet(FilterSet):
model = Project model = Project
class OrderFilterSet(FilterSet): class AnswerFilterSet(FilterSet):
id = AllLookupsFilter() budget = AllLookupsFilter()
contractor = RelatedFilter('users.filters.UserFilterSet')
team = RelatedFilter('users.filters.TeamFilterSet')
created = AllLookupsFilter() created = AllLookupsFilter()
currency = AllLookupsFilter()
id = AllLookupsFilter()
is_archive = AllLookupsFilter()
object_id = AllLookupsFilter()
rejected = AllLookupsFilter()
secure_deal_only = AllLookupsFilter()
term = AllLookupsFilter()
term_type = AllLookupsFilter()
# author = ... # ???
# messages = RelatedFilter('...')
content_type = RelatedFilter('common.filters.ContentTypeFilterSet')
contractors = RelatedFilter('users.filters.UserFilterSet')
portfolios = RelatedFilter('projects.filters.PortfolioFilterSet')
project = RelatedFilter('projects.filters.ProjectFilterSet') project = RelatedFilter('projects.filters.ProjectFilterSet')
teams = RelatedFilter('users.filters.TeamFilterSet')
class Meta:
model = Answer
class OrderFilterSet(FilterSet):
created = AllLookupsFilter()
id = AllLookupsFilter()
secure = AllLookupsFilter() secure = AllLookupsFilter()
status = AllLookupsFilter() status = AllLookupsFilter()
contractor = RelatedFilter('users.filters.UserFilterSet')
project = RelatedFilter('projects.filters.ProjectFilterSet')
team = RelatedFilter('users.filters.TeamFilterSet')
class Meta: class Meta:
model = Order model = Order
class StageFilterSet(FilterSet): class StageFilterSet(FilterSet):
cost = AllLookupsFilter()
cost_type = AllLookupsFilter()
id = AllLookupsFilter() id = AllLookupsFilter()
is_paid = AllLookupsFilter()
name = AllLookupsFilter() name = AllLookupsFilter()
pos = AllLookupsFilter()
result = AllLookupsFilter() result = AllLookupsFilter()
cost = AllLookupsFilter() status = AllLookupsFilter()
term = AllLookupsFilter() term = AllLookupsFilter()
cost_type = AllLookupsFilter()
term_type = AllLookupsFilter() term_type = AllLookupsFilter()
status = AllLookupsFilter()
pos = AllLookupsFilter()
order = RelatedFilter('projects.filters.OrderFilterSet') order = RelatedFilter('projects.filters.OrderFilterSet')
is_paid = AllLookupsFilter()
class Meta: class Meta:
model = Stage model = Stage
@ -87,6 +127,7 @@ class RealtyFilterSet(FilterSet):
class PortfolioPhotoFilterSet(FilterSet): class PortfolioPhotoFilterSet(FilterSet):
id = AllLookupsFilter() id = AllLookupsFilter()
portfolio = RelatedFilter('projects.filters.PortfolioFilterSet') portfolio = RelatedFilter('projects.filters.PortfolioFilterSet')
# img = ??? # img = ???

@ -3,11 +3,40 @@ from generic_relations.relations import GenericRelatedField
from rest_framework.serializers import ModelSerializer, ImageField, FileField, SerializerMethodField, PrimaryKeyRelatedField, ReadOnlyField from rest_framework.serializers import ModelSerializer, ImageField, FileField, SerializerMethodField, PrimaryKeyRelatedField, ReadOnlyField
from .models import Project, Realty, BuildingClassfication, ConstructionType, Order, Stage, Portfolio, PortfolioPhoto, Answer, AnswerFile from .models import Project, Realty, BuildingClassfication, ConstructionType, Order, Stage, Portfolio, PortfolioPhoto, Answer, AnswerFile
from common.serializers import LocationSerializer from common.serializers import LocationSerializer, ContentTypeSerializer
from specializations.serializers import SpecializationSerializer from specializations.serializers import SpecializationSerializer
from users.models import User, Team from users.models import User, Team
from users.serializers import UserSerializer, TeamSerializer from users.serializers import UserSerializer, TeamSerializer
class AnswerFileSerializer(ModelSerializer):
file = FileField()
class Meta:
model = AnswerFile
fields = (
'file',
'id',
'name',
# 'answer',
)
class PortfolioPhotoSerializer(ModelSerializer):
img = ImageField()
portfolio_id = PrimaryKeyRelatedField(read_only=True, source='portfolio')
class Meta:
model = PortfolioPhoto
fields = (
'id',
'img',
'portfolio_id',
)
class BuildingClassficationSerializer(ModelSerializer): class BuildingClassficationSerializer(ModelSerializer):
class Meta: class Meta:
model = BuildingClassfication model = BuildingClassfication
@ -93,16 +122,53 @@ class OrderSerializer_(ModelSerializer):
) )
class AnswerSerializer_(ModelSerializer):
project_id = PrimaryKeyRelatedField(read_only=True, source='project')
portfolio_ids = PrimaryKeyRelatedField(read_only=True, source='portfolios', many=True)
content_type = ContentTypeSerializer()
files = AnswerFileSerializer(many=True)
author = GenericRelatedField({
User: UserSerializer(),
Team: TeamSerializer()
})
class Meta:
model = Answer
fields = (
'budget',
'created',
'currency',
'id',
'is_archive',
'object_id',
'portfolio_ids',
'project_id',
'rejected',
'secure_deal_only',
'term',
'term_type',
'author', # Generic related field
'content_type',
'files',
)
class ProjectSerializer(ModelSerializer): class ProjectSerializer(ModelSerializer):
answers = AnswerSerializer_(many=True)
customer = UserSerializer() customer = UserSerializer()
specialization = SpecializationSerializer()
realty = RealtySerializer()
order = OrderSerializer_() # TODO: Can't serialize a reverse/reciprocal relation order = OrderSerializer_() # TODO: Can't serialize a reverse/reciprocal relation
realty = RealtySerializer()
specialization = SpecializationSerializer()
class Meta: class Meta:
model = Project model = Project
fields = ( fields = (
'answers',
'budget', 'budget',
'budget_by_agreement', 'budget_by_agreement',
'created', 'created',
@ -158,25 +224,10 @@ class OrderSerializer(ModelSerializer):
return False return False
class PortfolioPhotoSerializer(ModelSerializer):
img = ImageField()
portfolio_id = PrimaryKeyRelatedField(read_only=True, source='portfolio')
class Meta:
model = PortfolioPhoto
fields = (
'id',
'img',
'portfolio_id',
)
class PortfolioSerializer(ModelSerializer): class PortfolioSerializer(ModelSerializer):
# answers = AnswerSerializer(many=True) # answers = AnswerSerializer(many=True)
building_classification = BuildingClassficationSerializer() building_classification = BuildingClassficationSerializer()
construction_type = ConstructionTypeSerializer() construction_type = ConstructionTypeSerializer()
id = ReadOnlyField()
location = LocationSerializer() location = LocationSerializer()
photos = PortfolioPhotoSerializer(many=True) photos = PortfolioPhotoSerializer(many=True)
specialization = SpecializationSerializer() specialization = SpecializationSerializer()
@ -204,24 +255,11 @@ class PortfolioSerializer(ModelSerializer):
) )
class AnswerFileSerializer(ModelSerializer):
file = FileField()
class Meta:
model = AnswerFile
fields = (
'file',
'id',
'name',
# 'answer',
)
class AnswerSerializer(ModelSerializer): class AnswerSerializer(ModelSerializer):
content_type = ContentTypeSerializer()
files = AnswerFileSerializer(many=True) files = AnswerFileSerializer(many=True)
portfolios = PortfolioSerializer(many=True) portfolios = PortfolioSerializer(many=True)
project = ProjectSerializer project = ProjectSerializer()
author = GenericRelatedField({ author = GenericRelatedField({
User: UserSerializer(), User: UserSerializer(),
@ -236,15 +274,18 @@ class AnswerSerializer(ModelSerializer):
'created', 'created',
'currency', 'currency',
'id', 'id',
'is_archive',
'object_id',
'rejected',
'secure_deal_only', 'secure_deal_only',
'term', 'term',
'term_type', 'term_type',
'text',
'author', # Generic related field
'content_type',
'files', 'files',
'portfolios', 'portfolios',
'project', 'project',
'author', # Generic related field
# 'candidates', # 'candidates',
) )

@ -4,15 +4,15 @@ from .models import Review
class ReviewFilterSet(FilterSet): class ReviewFilterSet(FilterSet):
created = AllLookupsFilter()
id = AllLookupsFilter()
text = AllLookupsFilter() text = AllLookupsFilter()
type = AllLookupsFilter() type = AllLookupsFilter()
created = AllLookupsFilter()
from_customer = RelatedFilter('users.filters.UserFilterSet')
from_contractor = RelatedFilter('users.filters.UserFilterSet') from_contractor = RelatedFilter('users.filters.UserFilterSet')
target_customer = RelatedFilter('users.filters.UserFilterSet') from_customer = RelatedFilter('users.filters.UserFilterSet')
target_contractor = RelatedFilter('users.filters.UserFilterSet') target_contractor = RelatedFilter('users.filters.UserFilterSet')
target_customer = RelatedFilter('users.filters.UserFilterSet')
class Meta: class Meta:
model = Review model = Review

@ -2,15 +2,16 @@ from rest_framework_filters import FilterSet, RelatedFilter, AllLookupsFilter
from .models import Specialization from .models import Specialization
class SpecializationFilterSet(FilterSet): class SpecializationFilterSet(FilterSet):
children = RelatedFilter('specializations.filters.SpecializationFilterSet')
id = AllLookupsFilter() id = AllLookupsFilter()
level = AllLookupsFilter() level = AllLookupsFilter()
lft = AllLookupsFilter() lft = AllLookupsFilter()
name = AllLookupsFilter() name = AllLookupsFilter()
parent = RelatedFilter('specializations.filters.SpecializationFilterSet')
projects = RelatedFilter('projects.filters.ProjectFilterSet')
rght = AllLookupsFilter() rght = AllLookupsFilter()
tree_id = AllLookupsFilter() tree_id = AllLookupsFilter()
children = RelatedFilter('specializations.filters.SpecializationFilterSet')
parent = RelatedFilter('specializations.filters.SpecializationFilterSet')
projects = RelatedFilter('projects.filters.ProjectFilterSet')
class Meta: class Meta:
model = Specialization model = Specialization

@ -86,7 +86,7 @@
if ((queryString.indexOf('/chat') != 0) && (queryString.indexOf('/users/contractor-office/510/work-projects') != 0)) { if ((queryString.indexOf('/chat') != 0) && (queryString.indexOf('/users/contractor-office/510/work-projects') != 0)) {
domain = domain.replace(':' + port, ''); domain = domain.replace(':' + port, '');
var url = 'ws://' + domain + '/chat/' + userId + '/'; var url = 'ws://' + domain + ':8888/chat/' + userId + '/';
var sock = new WebSocket(url); var sock = new WebSocket(url);
var intervalId; var intervalId;
sock.onopen = function () { sock.onopen = function () {

@ -47,8 +47,8 @@ class TeamFilterSet(FilterSet):
class ContractorResumeFilterSet(FilterSet): class ContractorResumeFilterSet(FilterSet):
id = AllLookupsFilter() id = AllLookupsFilter()
text = AllLookupsFilter()
resume_file = AllLookupsFilter() resume_file = AllLookupsFilter()
text = AllLookupsFilter()
class Meta: class Meta:
model = ContractorResume model = ContractorResume
@ -56,8 +56,8 @@ class ContractorResumeFilterSet(FilterSet):
class ContractorResumeFilesFilterSet(FilterSet): class ContractorResumeFilesFilterSet(FilterSet):
id = AllLookupsFilter() id = AllLookupsFilter()
title = AllLookupsFilter()
img = AllLookupsFilter() img = AllLookupsFilter()
title = AllLookupsFilter()
resume = RelatedFilter('users.filters.ContractorResumeFilterSet') resume = RelatedFilter('users.filters.ContractorResumeFilterSet')

@ -738,6 +738,7 @@
{% if request.user.is_customer %} {% if request.user.is_customer %}
var customerId = {{ request.user.pk }} var customerId = {{ request.user.pk }}
var contractorId = {{ contractor.pk }}
var $projectSelectionModal = $('#projectSelectionModal') var $projectSelectionModal = $('#projectSelectionModal')
var projectUrl_ = '/projects/%id%/' var projectUrl_ = '/projects/%id%/'
var projectOrderChatUrl_ = '/chat/#order%orderId%' var projectOrderChatUrl_ = '/chat/#order%orderId%'
@ -751,7 +752,7 @@
$that.data('modalOpenButton', $modalOpenButton) $that.data('modalOpenButton', $modalOpenButton)
initProjectSelect($projectSelect, customerId) initProjectSelect($projectSelect, customerId, contractorId)
}) })

@ -15,9 +15,10 @@ class WorkSellFilter(django_filters.FilterSet):
class WorkSellPhotoFilterSet(FilterSet): class WorkSellPhotoFilterSet(FilterSet):
id = AllLookupsFilter() id = AllLookupsFilter()
work_sell = RelatedFilter('work_sell.filters.WorkSellFilterSet')
# img = ??? # img = ???
work_sell = RelatedFilter('work_sell.filters.WorkSellFilterSet')
class Meta: class Meta:
model = WorkSellPhoto model = WorkSellPhoto

Loading…
Cancel
Save