为数据导入扩展Django管理

为数据导入扩展Django管理,django,django-models,django-admin,Django,Django Models,Django Admin,我正在尝试在django管理界面中为特定模型构建导入特性/表单 我已经在Stackoverflow上找到了下面的问题,但是由于我是django的新手,我还不能把它全部连接起来 我想我知道如何使用Django对象以及如何使用CSV阅读器模块,但是我花了很长时间在Django中把它们组合起来 到目前为止,我尝试的是: models.py 管理员 views.py 我的问题是,管理行为真的是正确的吗?有没有更好的方法来实现我的目标?我怎么把它接起来?我还没有看到表单,在我选择导入操作并单击“go”之后

我正在尝试在django管理界面中为特定模型构建导入特性/表单

我已经在Stackoverflow上找到了下面的问题,但是由于我是django的新手,我还不能把它全部连接起来

我想我知道如何使用Django对象以及如何使用CSV阅读器模块,但是我花了很长时间在Django中把它们组合起来

到目前为止,我尝试的是:

models.py 管理员 views.py
我的问题是,管理行为真的是正确的吗?有没有更好的方法来实现我的目标?我怎么把它接起来?我还没有看到表单,在我选择导入操作并单击“go”之后。

管理员是正确的方法,但是我不会为此使用操作,这些操作是为在对象列表上运行而设计的,您不需要它。对于这种情况,只需扩展admin/index.html模板并向视图中添加href即可。然后创建一个正常表单,在其中进行处理

我认为管理员是正确的方法。它为您提供了内置身份验证和直接集成。好的,我通过导入视图的链接扩展了应用程序的管理更改列表。该视图被调用,但它抛出一个TemplateSyntaxError。也许尝试使用管理员的变更表单模板而不是编写自己的模板是个坏主意,我不知道。我正在寻找一种简单的方法来保持默认管理员的外观。我的问题已经在这里解决了:
class RfidTag(models.Model):
"""
Available RFID-Tags from Importfile
"""

system = models.DecimalField(
    _('system'),
    max_digits=4,
    decimal_places=0,
)

tagId = models.DecimalField(
    _('tag ID'),
    max_digits=4,
    decimal_places=0,
)

serial = models.CharField(
    _('serial'),
    max_length=10,
)


# forms.py #
class RfidImport(forms.ModelForm):
file_to_import = forms.FileField()

class Meta:
    model = RfidTag
    fields = ("file_to_import",)

def save(self, commit=False, *args, **kwargs):
    form_input = RfidImport()
    file_csv = self.cleaned_data['file_to_import']
    csv.register_dialect('excel-new', delimiter=';', quoting=csv.QUOTE_NONE)
    records = csv.reader(file_csv, dialect='excel-new')
    for line in records:
        self.system = line[0]
        self.tagId = line[1]
        self.serial = line[2]
        form_input.save()
    datafile.close()
class RfidTagAdmin(admin.ModelAdmin):
    list_display = ('system','tagId','serial')
    actions = ['import_tags']

    def get_urls(self):
        urls = super(RfidTagAdmin, self).get_urls()
        my_urls = patterns('',
            (r'^import/$', self.admin_site.admin_view(import_tags))
        )
        return my_urls + urls

    def import_tags(self, request, queryset):
        return HttpResponseRedirect("./import")

    import_tags.short_description = "Import new RFID tags"
    pass

admin.site.register(RfidTag, RfidTagAdmin)
@staff_member_required
def import_tags(request):
    if request.method == "POST":
        form = RfidImport(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            success = True
            context = {"form": form, "success": success}
            return HttpResponseRedirect("../")
    else:
        form = RfidImport()
        context = {"form": form}
        return HttpResponseRedirect("../")