2016-03-23 13 views
3

Bu durumda Group tablosunun kimlik alanını models.OneToOneField diye düşündüm. Ancak, views.py aracılığıyla, Grubun id == 2, 3 and 4 grubunu görüntü yüklemezsem, Grubun id == 6 ancak Group_Cover'ın group_id == 3'u olur.Django'nun OneToOneField'ı başka bir tablonun kimlik alanına başvurmuyor mu?

Üzgünüm, İngilizcem garip. Kısacası , ben Grubun kimliği olduğunda Group_Cover en GROUP_ID içinde Django seti 6 düşünce 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

Sen hiç Group örneğini atamanız gerekir
@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) 

cevap

4

Group_Cover bir. Az ya da çok bu yüzden: Group_Cover başlatılırken

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() 
+0

teşekkür ederiz (group=new_group bakınız) atıfta ne grup Django söylemek gerekiyor, Vladir Parrado Cruz. Bunu bilmiyordum. Şimdi deniyorum. Teşekkür ederim. – yamachan

+1

Bir şey değil :) –

2

Sen grubunu belirtmediniz. Bunun yerine aşağıdaki kod

:

new_cover = Group_Cover() 

aşağıdaki kullanın:

new_cover = Group_Cover(group=new_group) 
+0

Ah, anlıyorum. Teşekkür ederim Sudip Kafle. – yamachan

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

Eğer

+0

Teşekkür ederim, C14L. işe yaradı. – yamachan

İlgili konular