【问题标题】:Django how to make model for user modelDjango如何为用户模型制作模型
【发布时间】:2020-02-14 04:21:21
【问题描述】:

我正在开发注册应用程序。我有两个模型: User 模型和 Tasks 模型。我向 one 用户添加了新任务 throw Ajax,它为 每个 用户添加和显示。有什么解决办法吗?这里一些图片

这是我的代码: models.py

 class Task(models.Model):
    title=models.IntegerField()
    date = models.DateTimeField(default=datetime.now,blank=True)
    is_published=models.BooleanField(default=True)

 class CustomUser(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    image=models.FileField(upload_to='photos/%Y/%m/%d/',null=True,blank=True)

views.py

  if request.method == 'POST' and request.POST['form_type'] == 'task':
    if request.is_ajax():
        addtask = AddTask(request.POST)
        if addtask.is_valid():
            user = request.user.id
            addtask.objects.filter(user=user).cleaned_data
            addtask.objects.filter(user=user).save()               
            task_object = Task.objects.filter(user=user)(addtask)
            return JsonResponse({'error': False, 'data': task_object})
        else:
            print(addtask.errors)
            return JsonResponse({'error': True, 'data': addtask.errors})
    else:
        error = {
            'message': 'Error, must be an Ajax call.'
        }
        return JsonResponse(error, content_type="application/json")



    addtask = AddTask()
    task = Task.objects.order_by('-date').filter(is_published=True)

html 页面

       {% if task %}
                    {% for tas in task %}
                Task content



                        {% endfor %}
                        {% else %}

                        {% endif %}

【问题讨论】:

    标签: python html django ajax


    【解决方案1】:

    也许您应该在任务模型中添加与 CustomUser 的关系,并在视图中按所有者过滤任务以将数据呈现到模板?

     class Task(models.Model):
        title=models.IntegerField()
        date = models.DateTimeField(default=datetime.now,blank=True)
        is_published=models.BooleanField(default=True)
        user=models.ForeignKey(CustomUser)
    
     class CustomUser(models.Model):
        user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
        image=models.FileField(upload_to='photos/%Y/%m/%d/',null=True,blank=True)
    
    

    并且在视图中:

        ...
        addtask = AddTask()
        task = Task.objects.filter(is_published=True, user_id=request.user.id).order_by('-date')
    

    【讨论】:

      【解决方案2】:

      所以错误在于您从未将 CustomUser 模型 与您的 Task 模型 联系起来。他们应该有一对多的关系。完成后,您只需从数据库中检索与 感兴趣的用户 相关的任务并将它们发送到 HTML 页面。然后只会显示与特定用户相关的任务。

      【讨论】:

        【解决方案3】:
        1. 如果你想创建 CustomUser 模型,你应该创建一个类并从 AbstractBaseUserAbstractUser(django documentation) 继承它。

        2. 您的任务模型与 CustomUser 没有关系。您创建了 AddTask(?) 实例,但没有将它与任何用户绑定。

        3. 您没有提交呈现 HTML 模板的视图,但我认为您的查询类似于返回所有任务的 Tasks = Task.objects.all()

        This is how you should create CustomUser model

        This is documentation about relationships in Django

        This is about making queries in Django

        【讨论】:

          猜你喜欢
          • 2022-10-23
          • 1970-01-01
          • 2018-09-29
          • 2013-05-28
          • 2017-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多