簡體   English   中英

Django的OneToOneField不是引用另一個表的id字段嗎?

[英]Doesn't OneToOneField of Django refer another table's id field?

我認為models.OneToOneField (在本例中為group字段)引用了Group表的id字段。 但是,通過我的views.py ,當Group的id == 2, 3 and 4時,如果我不上傳圖像,則該組的id == 6但Group_Cover的group_id == 3會發生。

對不起,我的英文很奇怪。 簡而言之,當Group的id為6時,我認為Django在Group_Cover的group_id中設置了6。

models.py

@python_2_unicode_compatible
class Group(models.Model):

    #group_id = models.AutoField(primary_key=True)
    group_name = models.CharField(max_length=50, unique=False, blank=False)

    class Meta:
        db_table = traceback.extract_stack()[-2][2].lower()


@python_2_unicode_compatible
class Group_Cover(models.Model):

    group = models.OneToOneField(Group, primary_key=True)
    group_cover = models.ImageField(upload_to="static/image/group/")

    class Meta:
        db_table = traceback.extract_stack()[-2][2].lower()

views.py

@login_required(login_url='/')
def group_register(request):

    import pdb; pdb.set_trace()
    from myapp.forms import GroupRegister
    from myapp.forms import GroupCover
    formset = GroupRegister
    formcover = GroupCover

    if request.method == 'POST':
        form = formset(request.POST)
        cover = formcover(request.POST)

        if form.is_valid():
            from myapp.models import Group
            new_group = Group()
            new_group.group_name = form.cleaned_data['group_name']
            new_group.save()

            from myapp.models import Group_Cover
            new_cover = Group_Cover()
            new_cover.group_cover = request.FILES['group_cover']
            new_cover.save()

            return redirect('/myapp/group_page/{}'.format(new_group.id))

    else:
        form = formset()
        cover = formcover()

    view = { 
        'form': form,
        'cover': cover,
    }
    template = 'myapp/group/group_register.html'
    return render(request, template, view)

您需要將Group實例分配給Group_Cover 或多或少如此:

   if form.is_valid():
        from myapp.models import Group
        new_group = Group()
        new_group.group_name = form.cleaned_data['group_name']
        new_group.save()

        from myapp.models import Group_Cover
        new_cover = Group_Cover()
        new_cover.group_cover = request.FILES['group_cover']

        new_cover.group = new_group # This line assigns it

        new_cover.save()

初始化Group_Cover未指定組。

而不是代碼:

new_cover = Group_Cover()

使用以下內容:

new_cover = Group_Cover(group=new_group)
new_cover = Group_Cover(group=new_group)
new_cover.group_cover = request.FILES['group_cover']
new_cover.save()

需要告訴Django你所指的是哪個組(參見group=new_group

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM