带有上传数据的 Django 管理自定义表单

问题描述 投票:0回答:1

我有一个问题。 我需要向 Django 管理面板添加第二个功能:

  • 我有2个模型(城市和地区),一个地区有很多城市;
  • 在我的管理面板中,我想在创建新区域时添加带有城市列表的 Excel 文件

模型.py

class City(models.Model):
    name = models.CharField('Город', max_length=50, unique=True)
    slug = models.SlugField(max_length=50, unique=False, blank=True, null=True)
    city_latt = models.CharField('Широта', max_length=50, blank=True, null=True)
    city_long = models.CharField('Долгота', max_length=50, blank=True, null=True)
    country = models.CharField('ISO код страны', max_length=5)

   class Meta:
        verbose_name = 'Город'
        verbose_name_plural = 'Города'
    
   def __str__(self):
     return self.name
class Canton(models.Model):
    """ Canton list """
    canton_name = models.CharField('Название', max_length=255, blank=False)
    canton_city = models.ManyToManyField(City, verbose_name='Города', blank=False)
    canton_code_for_map = models.CharField('Код для карты', max_length=20, null=True, blank=True, default=None)
    canton_shortify = models.CharField('ISO обозначение', max_length=3, null=True, blank=True)
    country = models.CharField('ISO код страны', max_length=5)
    slug = models.SlugField('url', max_length=255, unique=True, blank=True)

    def __str__(self):
        return self.canton_name

    def get_cities(self):
        return ", ".join([c.name for c in self.canton_city.all()])
    get_cities.short_description = "Города"
    get_cities.admin_order_field = 'canton_city'

    class Meta:
        verbose_name = 'Территориальные еденицы'
        verbose_name_plural = 'Территориальные еденицы'

那么我如何在管理员中创建自定义表单,在其中上传文件并将特定区域分配给上传的城市?

现在我的区域管理员如下所示: admin.py

class CantonForm(forms.ModelForm):
    canton_city = forms.ModelMultipleChoiceField(queryset=City.objects.order_by('name'), label='Города')

    class Meta:
        model = City
        fields = '__all__'

class CantonAdmin(admin.ModelAdmin):
# class CantonAdmin(ImportMixin, admin.ModelAdmin):
    list_display = ('__str__', 'canton_name', 'canton_code_for_map', 'canton_shortify', 'slug', 'get_cities', 'country')
    list_filter = ('canton_name', 'country')
    search_fields = ['canton_name__icontains', 'canton_shortify__icontains', 'canton_city__name__icontains', 'country']
    form = CantonForm
    ordering = ['canton_name']

admin.site.register(Canton, CantonAdmin)
python django django-admin django-import-export
1个回答
0
投票

准确理解你的意思并不容易。你能提供更多细节吗?图表或带注释的屏幕截图会有所帮助。

如果您想在导入屏幕中有一个额外的表单字段,您可以在其中将 same 区域分配给上传中的每个城市,那么这是可能的,docs 有一个您可以复制的示例。

但是,如果你想在界面中能够修改每个城市,那就麻烦了很多。

© www.soinside.com 2019 - 2024. All rights reserved.