sqlite Django每次用户注册时创建一个单独的模型副本

zphenhs4  于 2022-11-24  发布在  SQLite
关注(0)|答案(1)|浏览(121)

所以,我真的是Django的新手。我在做一个应用程序,作为任务的一部分,它需要我构建一个具有登录功能的Web应用程序。此外,管理员应该创建一些对所有用户都通用的任务。下面是包含所有任务的模型,并将由管理员控制:

from django.db import models

# Create your models here.
class applib(models.Model):
  status_code=[
    ('C','Completed'),
    ('P','Pending'),
  ]
  title = models.CharField(max_length=50)
  status=models.CharField(max_length=2,choices=status_code)
  point = models.IntegerField()
  category= models.CharField(max_length=50)
  subcat = models.CharField(max_length=50)
  applink = models.CharField(max_length=100)
  def __str__(self):
      return self.title

现在我已经解决了登录功能,并且我希望在每次登录时,该模型的副本被附加到用户,以便用户可以拥有他自己的任务集。他应该能够跟踪这些任务并独立地执行这些任务。我如何在不为每个用户创建单独的任务模型的情况下做到这一点呢?我知道会有一个非常简单的解释和解决方案,但我现在所知道的是,我想在创建用户时为每个用户继承主模型中的任务。

  • 谢谢-谢谢
ct3nt3jp

ct3nt3jp1#

您需要将user字段添加到AppLib(将类名更改为CamelCase)。

class AppLib(models.Model):
    ...
    user = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, related_name="tasks")
    ...

这样,在管理面板中,您可以将任务分配给特定用户
如果要将任务分配给一组用户:

from django.contrib.auth import get_user_model
...

class AppLib(models.Model):
    ...
    users = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name="tasks")
    ...
    
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        # only fetch users that are active
        users = list(get_user_model()._default_manager.filter(
            is_active=True).values_list("pk", flat=True))
        self.users.add(*users)

admin.py中:

from django.contrib.auth import get_user_model
from django.contrib import admin
from <model_module> import AppLib

@admin.register(AppLib)
class AppLib(admin.ModelAdmin):
    ...
    def save_related(self, request, form, formsets, change):
        super().save_related(request, form, formsets, change)
        users = list(get_user_model()._default_manager.filter(
            is_active=True).values_list("pk", flat=True))
        form.instance.users.add(*users)

Read More about this logic here

相关问题