当前位置: 首页 > 知识库问答 >
问题:

在使用这种多对多关系之前,获取""的错误需要字段"id"有一个值

孔瑾瑜
2023-03-14

我正在尝试将团队添加到数据库中,但出现此错误。看了类似的问题,但没有一个解决了我的问题。(我是Django的新手)

我的代码看起来像:

形式。派克

from django.forms import ModelForm
from .models import Team


class TeamForm(ModelForm):


    class Meta:
        model = Team
        fields = ['title', 'team_country', 'team_logo']

    def __init__(self, *args, **kwargs):
        super(TeamForm, self).__init__(*args, **kwargs)

        for name, field in self.fields.items():
            field.widget.attrs.update({'class': 'input'})

模型。派克

from django.db import models

# Create your models here.
from django.contrib.auth.models import User
from django_countries.fields import CountryField
from .validators import validate_file_size


class Team(models.Model):
    #
    # Status

    ACTIVE = 'active'
    DELETED = 'deleted'

    CHOICES_STATUS = (
        (ACTIVE, 'Active'),
        (DELETED, 'Deleted')
    )    

    #
    # Fields

    title = models.CharField(max_length=255)
    team_country = CountryField(blank=True, null=True)    
    team_logo = models.ImageField(
        null=True, blank=True, upload_to='logos/', default="logos/logo.png",
        validators=[validate_file_size])
    members = models.ManyToManyField(User, related_name='teams')
    created_by = models.ForeignKey(User, related_name='created_teams', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    status = models.CharField(max_length=10, choices=CHOICES_STATUS, default=ACTIVE)

    class Meta:
        ordering = ['title']
    
    def __str__(self):
        return self.title

意见。派克

from django.shortcuts import render
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect, get_object_or_404


from .models import Team

@login_required
def add(request):
    profile = request.user.profile
    form = TeamForm()
    if request.method == 'POST':
        form = TeamForm(request.POST, request.FILES)

        if form.is_valid():
            team = form.save(commit=False)
            team.created_by = request.user
            team.members.add(request.user)
            team.save()

            
            profile.active_team_id = team.id
            profile.save()

            return redirect('account')

    context = {'form': form}
    return render(request, 'team/add.html', context)

当我尝试不使用表单时,例如仅使用标题字段:

@login_required
def add(request):
    if request.method == 'POST':
        title = request.POST.get('title')

        if title:
            team = Team.objects.create(title=title, created_by=request.user)
            team.members.add(request.user)
            team.save()

            userprofile = request.user.profile
            userprofile.active_team_id = team.id
            userprofile.save()

            return redirect('account')
    
    return render(request, 'team/add.html')

它是成功地添加它。我在这里做错了什么?

共有1个答案

阎智
2023-03-14

无法将成员添加到尚未存在的组中,因此需要在创建组后添加用户,例如:

 if form.is_valid():
        team = form.save(commit=False)
        team.created_by = request.user
        team.members.add(request.user)
        team.save()

现在是:

 if form.is_valid():
        team = form.save(commit=False)
        team.created_by = request.user
        team.save()
        team.members.add(request.user) # you can only add member after the group has been created

在第二个片段中相同:

team = Team.objects.create(title=title, created_by=request.user)
        team.save()
        team.members.add(request.user)
 类似资料:
  • 保存表单时,我遇到以下错误:“”需要为字段“surveythread”设置一个值,然后才能使用此多对多关系。 模型。py: views.py: forms.py 错误消息: 回溯: 我是Django和Python的新手。如果需要,我可以发布调试跟踪或迁移文件,但我觉得这是一个简单的修复。显然,关键是我想为每个调查结果保存多个调查线程。 谢谢!

  • 我正在做一个像电子商务网站这样的项目。到目前为止,一切正常,但如果用户购物车/包中没有任何内容,则会发生错误。我试过保存方法,但我想我做错了什么。有人能帮我解决吗 views.py 模型。派克 错误和回溯 先谢谢你。

  • 我目前有以下3种型号 现在我正试图以这种方式将值插入 我得到了错误 我看了这篇文章,但仍然无法找出问题所在。对此,如果有任何建议,我将不胜感激。

  • Car对象只是典型的JPA对象,没有对驱动程序的反向引用。 所以我试图通过这个来实现的是: 我可以使用详细的JSON视图阅读完整的汽车说明 或者我可以只读取汽车的Id,简写为jsonview 最重要的是,在创建新的驱动程序时,我只想传入汽车的JSON ID。这样,我就不需要在persist期间对Car进行不确定的读取,而只需要更新ID。 谢谢你。 更新:忘记了,我在创建驱动程序时通过的汽车的ID是

  • 问题内容: 我有2个班级:驾驶员和汽车。汽车表在单独的过程中更新。我需要的是在Driver中具有属性,该属性使我可以阅读完整的汽车说明,并仅写入指向现有Car的ID。这是示例: 汽车对象只是典型的JPA对象,没有向后引用驱动程序。 因此,我想通过以下方法实现的目标是:1)我可以使用详细的JSON View阅读完整的汽车描述2)或在简短的JsonView 3中仅阅读汽车的ID 3),最重要的是,在创

  • 问题内容: 我是Hibernate的新手,必须支持使用Hibernate的现有应用程序。这是一个纯报表应用程序-无需插入/更新/删除-仅选择 我可以看到在同一类的多个字段中使用了@Id注释的现有POJO对象 我的理解是,对于复合主键-您需要使用@Embeddable和@EmbeddedId 但是,这没有在我的课程中定义,奇怪的是代码可以编译并正常运行 这是我的代码的示例: 在pojo中还有更多字段