rework objitem model
This commit is contained in:
@@ -98,6 +98,8 @@ class GeoInline(admin.StackedInline):
|
||||
verbose_name_plural = "Гео"
|
||||
form = LocationForm
|
||||
readonly_fields = ("distance_coords_kup", "distance_coords_valid", "distance_kup_valid")
|
||||
prefetch_related = ("mirrors",)
|
||||
autocomplete_fields = ('mirrors',)
|
||||
fieldsets = (
|
||||
("Основная информация", {
|
||||
"fields": ("mirrors", "location", "distance_coords_kup",
|
||||
@@ -223,7 +225,7 @@ class ParameterAdmin(ImportExportActionModelAdmin, admin.ModelAdmin):
|
||||
)
|
||||
ordering = ("frequency",)
|
||||
list_select_related = ("polarization", "modulation", "standard", "id_satellite",)
|
||||
filter_horizontal = ('objitems',) # For many-to-many relationship
|
||||
autocomplete_fields = ('objitems',)
|
||||
# raw_id_fields = ("id_sigma_parameter", )
|
||||
inlines = [SigmaParameterInline]
|
||||
# autocomplete_fields = ("id_sigma_parameter", )
|
||||
@@ -402,44 +404,17 @@ def show_on_map(modeladmin, request, queryset):
|
||||
|
||||
show_on_map.short_description = "Показать выбранные на карте"
|
||||
|
||||
class ObjItemForm(forms.ModelForm):
|
||||
parameter = forms.ModelChoiceField(
|
||||
queryset=Parameter.objects.all(),
|
||||
required=False,
|
||||
label="Параметр"
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = ObjItem
|
||||
fields = '__all__'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
# Set initial value if the ObjItem already has a parameter
|
||||
if self.instance.pk:
|
||||
first_param = self.instance.parameters_obj.first()
|
||||
if first_param:
|
||||
self.fields['parameter'].initial = first_param
|
||||
|
||||
def save(self, commit=True):
|
||||
instance = super().save(commit=commit)
|
||||
|
||||
# Handle the single parameter assignment - replace all existing relationships
|
||||
if self.cleaned_data.get('parameter'):
|
||||
# Clear all existing parameter relationships
|
||||
instance.parameters_obj.clear()
|
||||
# Add the selected parameter
|
||||
instance.parameters_obj.add(self.cleaned_data['parameter'])
|
||||
else:
|
||||
# If no parameter selected, clear all
|
||||
instance.parameters_obj.clear()
|
||||
|
||||
return instance
|
||||
class ParameterObjItemInline(admin.StackedInline):
|
||||
model = ObjItem.parameters_obj.through
|
||||
extra = 0
|
||||
max_num = 1
|
||||
verbose_name = "ВЧ загрузка"
|
||||
verbose_name_plural = "ВЧ загрузки"
|
||||
|
||||
|
||||
|
||||
@admin.register(ObjItem)
|
||||
class ObjectAdmin(admin.ModelAdmin):
|
||||
form = ObjItemForm
|
||||
list_display = (
|
||||
"name",
|
||||
"sat_name",
|
||||
@@ -475,9 +450,11 @@ class ObjectAdmin(admin.ModelAdmin):
|
||||
)
|
||||
|
||||
ordering = ("name",)
|
||||
inlines = [GeoInline]
|
||||
inlines = [ParameterObjItemInline, GeoInline]
|
||||
actions = [show_on_map]
|
||||
|
||||
|
||||
|
||||
def get_queryset(self, request):
|
||||
qs = super().get_queryset(request)
|
||||
return qs.select_related('geo_obj').prefetch_related(
|
||||
|
||||
Reference in New Issue
Block a user