如何在 Django 中获取名称而不是 ID
how to fetch name in instead of id in django
我有一个 ServiceProvider 模型。当我将其导入 CSV 时,它提供类别、国家、州、城市、名称的提供商 ID。在 CSV 中导入时如何获取名称而不是 ID。
这是我的models.py
class ServiceProvider(models.Model):
name = models.OneToOneField('accounts.User', on_delete=models.CASCADE)
Date_Of_Birth = models.DateField(null=True)
# upload_Photograph = models.ImageField(upload_to='images/')
Education_Qualification = models.CharField(max_length=254, null=True)
category = models.ForeignKey('accounts.Category', null=True, on_delete=models.CASCADE, related_name='category')
phone_No = models.IntegerField(null=False)
alternate_No = models.IntegerField(null=True)
bank_account_no = models.IntegerField(null=True)
IFSC_code = models.IntegerField(null=True)
branch_name = models.CharField(max_length=254, null=True)
PAN = models.CharField(max_length=254, null=True)
country = models.ForeignKey('accounts.Country', null=True, on_delete=models.CASCADE, related_name='country')
state = models.ForeignKey('accounts.State', null=True, on_delete=models.CASCADE, related_name='state')
cities = models.ForeignKey('accounts.City', null=True, on_delete=models.CASCADE, related_name='cities')
address = models.CharField(max_length=254)
def __str__(self):
return self.name.username
这是我的views.py
@login_required
def export_csv(request):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="user-serviceprovider.xls"'
writer = csv.writer(response)
writer.writerow(['name', 'Date_Of_Birth', 'Education_Qualification', 'category','phone_No','alternate_No','bank_account_no','IFSC_code','branch_name','PAN','country','state','cities','address'])
users = ServiceProvider.objects.all().values_list('name', 'Date_Of_Birth', 'Education_Qualification', 'category','phone_No','alternate_No','bank_account_no','IFSC_code','branch_name','PAN','country','state','cities','address')
for user in users:
writer.writerow(user)
return response
我认为你真正需要的是像这样的小调整:
...
users = ServiceProvider.objects.all().values_list('name__username', 'Date_Of_Birth', 'Education_Qualification', 'category','phone_No','alternate_No','bank_account_no','IFSC_code','branch_name','PAN','country','state','cities','address')
...
注意 'name__username'
,它告诉 Django 更深入一点 select 来自 accounts.User
table 的 username
列,因为普通 'name'
指的是 ServiceProvider
table 中的外键(这里 username
只是一个例子,实际的列名取决于你的 accounts.User
table).
for u in users:
row = [u.id, u.name, u.yourfield, ...]
writer.writerow(row)
我有一个 ServiceProvider 模型。当我将其导入 CSV 时,它提供类别、国家、州、城市、名称的提供商 ID。在 CSV 中导入时如何获取名称而不是 ID。
这是我的models.py
class ServiceProvider(models.Model):
name = models.OneToOneField('accounts.User', on_delete=models.CASCADE)
Date_Of_Birth = models.DateField(null=True)
# upload_Photograph = models.ImageField(upload_to='images/')
Education_Qualification = models.CharField(max_length=254, null=True)
category = models.ForeignKey('accounts.Category', null=True, on_delete=models.CASCADE, related_name='category')
phone_No = models.IntegerField(null=False)
alternate_No = models.IntegerField(null=True)
bank_account_no = models.IntegerField(null=True)
IFSC_code = models.IntegerField(null=True)
branch_name = models.CharField(max_length=254, null=True)
PAN = models.CharField(max_length=254, null=True)
country = models.ForeignKey('accounts.Country', null=True, on_delete=models.CASCADE, related_name='country')
state = models.ForeignKey('accounts.State', null=True, on_delete=models.CASCADE, related_name='state')
cities = models.ForeignKey('accounts.City', null=True, on_delete=models.CASCADE, related_name='cities')
address = models.CharField(max_length=254)
def __str__(self):
return self.name.username
这是我的views.py
@login_required
def export_csv(request):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="user-serviceprovider.xls"'
writer = csv.writer(response)
writer.writerow(['name', 'Date_Of_Birth', 'Education_Qualification', 'category','phone_No','alternate_No','bank_account_no','IFSC_code','branch_name','PAN','country','state','cities','address'])
users = ServiceProvider.objects.all().values_list('name', 'Date_Of_Birth', 'Education_Qualification', 'category','phone_No','alternate_No','bank_account_no','IFSC_code','branch_name','PAN','country','state','cities','address')
for user in users:
writer.writerow(user)
return response
我认为你真正需要的是像这样的小调整:
...
users = ServiceProvider.objects.all().values_list('name__username', 'Date_Of_Birth', 'Education_Qualification', 'category','phone_No','alternate_No','bank_account_no','IFSC_code','branch_name','PAN','country','state','cities','address')
...
注意 'name__username'
,它告诉 Django 更深入一点 select 来自 accounts.User
table 的 username
列,因为普通 'name'
指的是 ServiceProvider
table 中的外键(这里 username
只是一个例子,实际的列名取决于你的 accounts.User
table).
for u in users:
row = [u.id, u.name, u.yourfield, ...]
writer.writerow(row)