UpdateView和CreateView的代码是高效的还是可以改进的?

2024-04-26 11:18:10 发布

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

对于django1.6,这是我的最后一段代码。逻辑是,如果用户不存在数据库对象,则转到“account\u add”添加帐户。我不想使用用户配置文件或修改用户对象直接为特定的问题,所以请不要建议这些。我想知道的是,这段代码是否写得很好,或者可以写得更好,效率更高?你知道吗

class AccountCreateOrModify():
    model = Employee
    form_class = AccountForm
    template_name = 'bot_data/account_modify.html'
    success_url = reverse_lazy('home')


class ViewEmployee(LoginRequiredMixin, 
        DetailView):

    model = Employee
    template_name = 'bot_data/employee_detail.html'

    def dispatch(self, request,
            *args, **kwargs):
        try:
            pk = self.request.user.pk
            queryset = self.model.objects.get(user_assigned=pk)
            return super(ViewEmployee, 
                    self).dispatch(request, 
                            *args, **kwargs)
        except Employee.DoesNotExist:
            return redirect('account_add')

    def get_object(self):
            user = self.request.user.id
            find_user = self.model.objects.get(id=user)
            return find_user

class AccountModify(LoginRequiredMixin, 
        AccountCreateOrModify,
        UpdateView):

    def dispatch(self, request,
            *args, **kwargs):
        try:
            pk = self.request.user.pk
            queryset = self.model.objects.get(user_assigned=pk)
            return super(AccountModify, 
                    self).dispatch(request, 
                            *args, **kwargs)
        except Employee.DoesNotExist:
            return redirect('account_add')

    def get_object(self, queryset=None):
        pk = self.request.user.pk
        queryset = self.model.objects.get(user_assigned=pk)
        return queryset





class AccountCreateRecord(LoginRequiredMixin,
        AccountCreateOrModify,
        CreateView):
    print "filler"

Tags: selfgetmodelreturnrequestdefemployeeargs
1条回答
网友
1楼 · 发布于 2024-04-26 11:18:10

try块应包含一行:

def dispatch(self, request, *args, **kwargs):
    pk = self.request.user.pk
    try:
        queryset = self.model.objects.get(user_assigned=pk)
    except Employee.DoesNotExist:
        return redirect('account_add')
    return super(ViewEmployee, self).dispatch(
        request, *args, **kwargs)

如果except没有返回任何内容,请查找tryexceptelse块序列。你知道吗

类应继承自对象或没有括号:

class AccountCreateOrModify(object): # a bit better
    pass

class AccountCreateOrModify: # avoid useless parenthesis
    pass

如果Employee是一个抽象类,那么可以避免访问数据库。你知道吗

def get_object(self):
    user = self.request.user.id
    find_user = self.model.objects.get(id=user)
    return find_user

为什么在你上节课上说“print”,你知道pass(no op)关键字吗?你知道吗

class AccountCreateRecord(LoginRequiredMixin, AccountCreateOrModify,
                          CreateView):
    pass

相关问题 更多 >