我正在尝试在django管理界面中为特定模型构建导入功能/表单。
我已经在Stackoverflow上找到了以下问题,但是由于我是django的新手,我无法将其全部连接起来。 Import csv data into database in Django Admin
我想我理解如何使用Django对象以及如何使用CSV阅读器模块,但我有点时间将它们放在Django中。
到目前为止我尝试过的是: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("../")
我的问题是,管理员行动实际上是正确的方式吗?有没有更好的方法来实现我的目标?我如何连接它?在选择导入操作并单击“go”后,我还没有看到该表单。
答案 0 :(得分:0)
管理员是正确的方式,但我不会为此使用操作,这些操作旨在通过对象列表运行,而您不需要它。对于这种情况,只需扩展admin / index.html模板并在视图中添加href。之后,您可以创建一个正常的表单来进行处理