如何在 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)