3

一般的な外部キーを設定しようとして頭を壁にぶつけています。できるだけ多くのコードを投稿するつもりです。1 時間後にもう一度試してみます。

ドキュメントを何百万回も読みましたが、役に立たないようです。

これが私の見解で行っていることです。

def create_stream(request):
    stream_form = StreamForm()
    comment_form = CommentDataForm()

    if request.POST:    
        stream_form = StreamForm(request.POST)
        comment_form = CommentDataForm(request.POST)    
        if stream_form.is_valid() and comment_form.is_valid():

            attempt = comment_form.save()

            stream_form.save(commit=False)
            stream_form.content_object = attempt
            stream_form.save()

            return HttpResponseRedirect('/main/')
        else:
            HttpResponse('Nope')

    context = {'form1':stream_form, 'form2':comment_form}
    template = 'nregistration.html'
    return render(request, template, context)

フォームはすべて ModelForms です (使いやすさのため、保存機能を使用できます)。彼らはこのように見えます

class StreamForm(forms.ModelForm):
    class Meta:
        model = Stream
        exclude = ['object_id', 'content_object']

class CommentDataForm(forms.ModelForm):
    class Meta:
        model = CommentData

関連するクラスは次のようになります

class Stream(models.Model):
    uid = models.CharField(max_length=20, null=True, blank=True)
    str_type = models.CharField(max_length=120, default='ABC')
    creator = models.ForeignKey(User, related_name="author", null=True, blank=True)
    parent = models.ForeignKey('self', related_name="child_of", null=True, blank=True)
    create_timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)


    limit = models.Q(app_label='picture', model='commentdata') | models.Q(app_label='picture', model='repsonsedata')

    content_type = models.ForeignKey(ContentType,verbose_name='content page',limit_choices_to=limit,null=True,blank=True)
    object_id = models.PositiveIntegerField(verbose_name= 'related object',null=True)
    content_object = GenericForeignKey('content_type', 'object_id')

    def __unicode__(self):
        return self.uid 

    class Meta:
        unique_together = ('uid',)

class CommentData(models.Model):
    uid = models.CharField(max_length=20, null=True, blank=True)
    contents = models.CharField(max_length=120, default='ABC')  
    create_timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)

class ResponseData(models.Model):
    uid = models.CharField(max_length=20, null=True, blank=True)
    contents = models.CharField(max_length=120, default='ABC')  
    create_timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)

すべてがとても単純に見えますが、content_type、object_id、および content_object はボールをプレーしたくありません。私がやりたいことは、Comment Data フォームのインスタンスを作成し、それを content_object タイプに割り当てることです。content_object が (HttpResponse でわかる限り) 何も返さず、content_type と object id の両方が設定されていない、ストリームとコメント データの両方のインスタンスになります。

明らかに明白な/愚かな間違いはありますか?

4

1 に答える 1