简体   繁体   English

Django manytomany 字段持有用户自动填充

[英]Django manytomany field holding Users autofilling

I am pulling data from a json file on the web, and updating it in my django database.我正在从 web 上的 json 文件中提取数据,并在我的 django 数据库中对其进行更新。 I want to keep track of users that are associated with each team, but as soon as a user loads the page once they are added to the model.我想跟踪与每个团队关联的用户,但是一旦用户加载页面,一旦他们被添加到 model。 How do I avoid this?我该如何避免这种情况?

class Team(models.Model):
    name = models.CharField(max_length=120)
    abbreviation = models.CharField(max_length=3)
    id = models.IntegerField(primary_key=True)
    link = models.CharField(max_length=120)
    wins = models.IntegerField(default=0)
    losses = models.IntegerField(default=0)
    ties = models.IntegerField(default=0)
    points = models.IntegerField(default=0)
    users = models.ManyToManyField(User)
def getTeams():
    import requests
    baseUrl = "https://statsapi.web.nhl.com/"

    # INITALIZING THE DATA IN THE DATA DICTIONARY
    r = requests.get(baseUrl + '/api/v1/teams')
    originalData = r.json()
    # i dont need the copyright, only care about the teams
    originalData = originalData["teams"]
    for team in originalData:
        id = team["id"]
        try:
            databaseTeam = Team.objects.get(id = id)
        except Exception:
            Team.objects.create(id = id)
            databaseTeam = Team.objects.get(id = id)
        databaseTeam.name = team["name"]
        databaseTeam.abbreviation = team["abbreviation"]
        databaseTeam.link = team["link"]
        databaseTeam.save()
    print("done")

@login_required
def myTeamView(request):
    t1 = Thread(target=getTeams)
    t1.start()
    return(render(request, "teams/myTeams.html", {}))

The user is stored on user variable inside the request, so first we need to pass it to getTeams method.用户存储在请求内的用户变量中,所以首先我们需要将它传递给getTeams方法。 Then we use the method add of Manytomany fields to append an record to it, in this case the user.然后我们使用Manytomany字段的方法add到append一个记录给它,在这种情况下是用户。

def getTeams(request):
    import requests
    baseUrl = "https://statsapi.web.nhl.com/"

    # INITALIZING THE DATA IN THE DATA DICTIONARY
    r = requests.get(baseUrl + '/api/v1/teams')
    originalData = r.json()
    # i dont need the copyright, only care about the teams
    originalData = originalData["teams"]
    for team in originalData:
        id = team["id"]
        try:
            databaseTeam = Team.objects.get(id = id)
        except Exception:
            Team.objects.create(id = id)
            databaseTeam = Team.objects.get(id = id)
        databaseTeam.name = team["name"]
        databaseTeam.abbreviation = team["abbreviation"]
        databaseTeam.link = team["link"]
        databaseTeam.save()
        databaseTeam.users.add(request.user) # after save!!
    print("done")

@login_required
def myTeamView(request):
    t1 = Thread(target=getTeams, args=(request, ))
    t1.start()
    return(render(request, "teams/myTeams.html", {}))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM