Django键尝试格式化foreignkey时出错

2024-04-19 03:52:19 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试创建文件路径时出现以下错误

    filepath = '{comp}/utils/locndb/{vehdir}.{filename}'.format(comp,vehdir, filename)
KeyError: 'comp'

我不知道如何从一对多外键字段中提取字符串

你知道吗额外.py你知道吗

def get_file_path(vehicle, filename):

filepath = ''

vehdir = vehicle.vehid
print vehdir
comp = getattr(vehicle.company, 'user', None)
print comp

filepath = 'optiload/{comp}/utils/locndb/{vehdir}.{filename}'.format(comp,vehdir, filename)
print filepath

return filepath

你知道吗视图.py你知道吗

@login_required   
def loadlocndb(request):


if request.method == "POST" and request.FILES['locndb']:
    pks = request.POST.getlist("update")

    selected_objects = Vehicle.objects.filter(pk__in=pks)

    vlist = []
    for i in selected_objects:
        vlist.append(i)
        locnfile = request.FILES['locndb']
        fs = FileSystemStorage()
        filename = fs.save(locnfile.name, locnfile)
        filename = get_file_path(i, filename)
        uploaded_file_url = fs.url(filename)

    return render(request, 'portal/loadlocndb.html',{"vlist":vlist, "uploaded_file_url": uploaded_file_url})

你知道吗型号.py你知道吗

 # Create your models here.
class UserProfile(models.Model):
    # This line is required. Links UserProfile to a User model instance.
    user = models.OneToOneField(User)

    # The additional attributes we wish to include.
    compName = models.CharField(max_length = 20)
    milkco = models.IntegerField()


    # Override the __unicode__() method to return out something meaningful!
    def __unicode__(self):
        return self.user.username

class Vehicle(models.Model):
    vehid = models.CharField(max_length = 10)
    company = models.ForeignKey(UserProfile, default = 1)
    #depot = models.ForeignKey(Depot, default = 1)
    locndb = models.FileField(upload_to='optload/', default= "setting.MEDIA_ROOT/locndb/LocnDB.csv")

    class Meta:
        db_table = "vehicle"

    def __unicode__(self):
        return self.vehid

我想导入一个文件并将其保存到文件路径/optiload/{customer}/utils/locndb/{vehicle}/{filename}有没有比现在更好的方法呢?你知道吗


Tags: toselfurlreturnmodelsrequestdeffilename
1条回答
网友
1楼 · 发布于 2024-04-19 03:52:19

问题是字符串包含命名参数(例如{comp}),但在调用format()时使用的是位置参数

您可以从字符串中的大括号中删除名称:

filepath = '{}/utils/locndb/{}.{}'.format(comp, vehdir, filename)

或在调用format时使用关键字参数:

filepath = '{comp}/utils/locndb/{vehdir}.{filename}'.format(comp=comp, vehdir=vehdir, filename=filename)

相关问题 更多 >