@@ -159,13 +159,86 @@ class Meta:
159159 list_serializer_class = ProjectGoalBulkListSerializer
160160
161161
162+ class CompanySerializer (serializers .ModelSerializer ):
163+ class Meta :
164+ model = Company
165+ fields = ("id" , "name" , "inn" )
166+ read_only_fields = ("id" ,)
167+
168+
169+ class ProjectCompanySerializer (serializers .ModelSerializer ):
170+ company = CompanySerializer ()
171+ project_id = serializers .IntegerField (read_only = True )
172+ decision_maker = serializers .PrimaryKeyRelatedField (read_only = True )
173+
174+ class Meta :
175+ model = ProjectCompany
176+ fields = ("id" , "project_id" , "company" , "contribution" , "decision_maker" )
177+
178+
179+ class ResourceSerializer (serializers .ModelSerializer ):
180+ project_id = serializers .IntegerField (read_only = True )
181+ project = serializers .PrimaryKeyRelatedField (
182+ queryset = Project .objects .all (),
183+ write_only = True ,
184+ required = False ,
185+ )
186+
187+ class Meta :
188+ model = Resource
189+ fields = (
190+ "id" ,
191+ "project_id" ,
192+ "project" ,
193+ "type" ,
194+ "description" ,
195+ "partner_company" ,
196+ )
197+ read_only_fields = ("id" , "project" )
198+
199+ def validate (self , attrs ):
200+ project = attrs .get ("project" , getattr (self .instance , "project" , None ))
201+ partner_company = attrs .get (
202+ "partner_company" , getattr (self .instance , "partner_company" , None )
203+ )
204+ if project and partner_company :
205+ exists = ProjectCompany .objects .filter (
206+ project = project , company = partner_company
207+ ).exists ()
208+ if not exists :
209+ raise serializers .ValidationError (
210+ {
211+ "partner_company" : "Эта компания не является партнёром данного проекта."
212+ }
213+ )
214+ return attrs
215+
216+ def create (self , validated_data ):
217+ obj = Resource (** validated_data )
218+ obj .full_clean ()
219+ obj .save ()
220+ return obj
221+
222+ def update (self , instance , validated_data ):
223+ for key , value in validated_data .items ():
224+ setattr (instance , key , value )
225+ instance .full_clean ()
226+ instance .save ()
227+ return instance
228+
229+
162230class ProjectDetailSerializer (serializers .ModelSerializer ):
163231 achievements = AchievementListSerializer (many = True , read_only = True )
164232 cover = UserFileSerializer (required = False )
165233 collaborators = CollaboratorSerializer (
166234 source = "collaborator_set" , many = True , read_only = True
167235 )
168236 vacancies = ProjectVacancyListSerializer (many = True , read_only = True )
237+ goals = ProjectGoalSerializer (many = True , read_only = True )
238+ partners = ProjectCompanySerializer (
239+ source = "project_companies" , many = True , read_only = True
240+ )
241+ resources = ResourceSerializer (many = True , read_only = True )
169242 short_description = serializers .SerializerMethodField ()
170243 industry_id = serializers .IntegerField (required = False )
171244 views_count = serializers .SerializerMethodField (method_name = "count_views" )
@@ -222,17 +295,20 @@ class Meta:
222295 "description" ,
223296 "short_description" ,
224297 "achievements" ,
298+ "goals" ,
225299 "links" ,
226300 "region" ,
227301 "industry" ,
228302 "industry_id" ,
229303 "presentation_address" ,
230304 "image_address" ,
231305 "collaborators" ,
306+ "partners" ,
232307 "leader" ,
233308 "draft" ,
234309 "is_company" ,
235310 "vacancies" ,
311+ "resources" ,
236312 "datetime_created" ,
237313 "datetime_updated" ,
238314 "views_count" ,
@@ -585,74 +661,6 @@ def _is_valid_url(self, url: str) -> bool:
585661 return False
586662
587663
588- class CompanySerializer (serializers .ModelSerializer ):
589- class Meta :
590- model = Company
591- fields = ("id" , "name" , "inn" )
592- read_only_fields = ("id" ,)
593-
594-
595- class ProjectCompanySerializer (serializers .ModelSerializer ):
596- company = CompanySerializer ()
597- project_id = serializers .IntegerField (read_only = True )
598- decision_maker = serializers .PrimaryKeyRelatedField (read_only = True )
599-
600- class Meta :
601- model = ProjectCompany
602- fields = ("id" , "project_id" , "company" , "contribution" , "decision_maker" )
603-
604-
605- class ResourceSerializer (serializers .ModelSerializer ):
606- project_id = serializers .IntegerField (read_only = True )
607- project = serializers .PrimaryKeyRelatedField (
608- queryset = Project .objects .all (),
609- write_only = True ,
610- required = False ,
611- )
612-
613- class Meta :
614- model = Resource
615- fields = (
616- "id" ,
617- "project_id" ,
618- "project" ,
619- "type" ,
620- "description" ,
621- "partner_company" ,
622- )
623- read_only_fields = ("id" , "project" )
624-
625- def validate (self , attrs ):
626- project = attrs .get ("project" , getattr (self .instance , "project" , None ))
627- partner_company = attrs .get (
628- "partner_company" , getattr (self .instance , "partner_company" , None )
629- )
630- if project and partner_company :
631- exists = ProjectCompany .objects .filter (
632- project = project , company = partner_company
633- ).exists ()
634- if not exists :
635- raise serializers .ValidationError (
636- {
637- "partner_company" : "Эта компания не является партнёром данного проекта."
638- }
639- )
640- return attrs
641-
642- def create (self , validated_data ):
643- obj = Resource (** validated_data )
644- obj .full_clean ()
645- obj .save ()
646- return obj
647-
648- def update (self , instance , validated_data ):
649- for key , value in validated_data .items ():
650- setattr (instance , key , value )
651- instance .full_clean ()
652- instance .save ()
653- return instance
654-
655-
656664class ProjectCompanyUpsertSerializer (serializers .Serializer ):
657665 name = serializers .CharField (max_length = 255 )
658666 inn = serializers .RegexField (regex = r"^\d{10}(\d{2})?$" )
0 commit comments