如何在 Django 中显示查询集对象名称而不是查询集对象本身?

时间:2021-03-31 14:17:07

标签: python django

我的应用的注册用户可以创建和删除费用跟踪子账户。删除时,他们可以选择要删除的帐户:

Delete Account

上图显示了当前的选择。我想显示帐户的名称,而不是名称所指的对象,但如何显示?

forms.py

class UdaForm(forms.Form):
# User Deleted Account Form
def __init__(self, *args, user, **kwargs):
    super().__init__(*args, **kwargs)
    self.user = user
    self.fields['UDA_name'].queryset = UserMadeAccount.objects.filter(UMA_user=user)

UDA_name = forms.ModelChoiceField(label="Account", queryset=UserMadeAccount.objects.all())

views.py

def user_accounts(request, user_id):
if request.user.is_authenticated:
    # Get all accounts of user by matching user_id
    user_made_accounts = specific_umacs(user_id)
    user_data = [i for i in user_made_accounts]

    if "UMA_form_name" in request.POST:
        if request.method == 'POST':
            uma_form = UmaForm(request.POST)
            uda_form = UdaForm(user=request.user)
            if uma_form.is_valid():

                # Adds new user made account to the DB
                add_uma(uma_form, request.user)

                # Get all accounts of user by matching user_id
                user_made_accounts = specific_umacs(user_id)
                user_data = [i for i in user_made_accounts]   
                return render(request, 'user_accounts.html', {"uma_form": uma_form, "uda_form": uda_form, "user_data": user_data})       
                

    if "UDA_name" in request.POST:
        if request.method == 'POST':

            uda_form = UdaForm(request.POST, user=request.user)
            uma_form = UmaForm()

            if uda_form.is_valid():

                # Delete user made account from DB
                delete_uma(uda_form=uda_form, user_obj=request.user)
                
                # Get all accounts of user by matching user_id
                user_made_accounts = specific_umacs(user_id)
                user_data = [i for i in user_made_accounts] 
                return render(request, 'user_accounts.html', {"uma_form": uma_form, "uda_form": uda_form, "user_data": user_data})


    if request.method == 'GET':
        uma_form = UmaForm()
        uda_form = UdaForm(user=request.user)
    else:
        uma_form = UmaForm()
        uda_form = UdaForm(user=request.user)

    return render(request, 'user_accounts.html', {"uma_form": uma_form, "uda_form": uda_form, "user_data": user_data})
else:
    return render(request, 'please_authenticate.html')

user_accounts.html

    {% extends "base.html" %}
    {% block page_content %}

    ...

    <!-- Delete Account Modal -->

    <button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bd-delete_me-modal-lg">Delete Account</button>

    <div class="modal fade bd-delete_me-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
        <div class="modal-dialog modal-lg modal-dialog-centered">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="exampleModalLongTitle">Delete one of your accounts</h5>
                </div>
                <div class="modal-body">

                    <form action="" method="POST">
                        {% csrf_token %}
                        <div class="form-row">
                            <div class="col">
                                {{ uda_form.UDA_name|as_crispy_field }}
                            </div>
                        </div>

                        </div>
                        <div class="modal-footer">
                            <button type="submit" class="btn btn-primary">Delete</button>
                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                        </div>
                    </form>
            </div>
        </div>
    </div>
    <!-- Modal END -->
    
    ...

    {% endblock page_content %}

1 个答案:

答案 0 :(得分:1)

您只需将 __str__ 方法 [doc] 添加到您的 UserMadeAccount 模型

def __str__(self):
    return self.field_name 
<块引用>

每当您对对象调用 str() 时,都会调用 str() 方法。 Django 在许多地方使用 str(obj)。最值得注意的是,要显示 Django 管理站点中的一个对象,并作为插入到 模板显示对象时。因此,你应该总是返回一个 来自 str() 的模型的漂亮的、人类可读的表示 方法。