2017-01-09 2 views
1

Я создаю сайт, на котором пользователи могут публиковать свой контент, каждый контент перенаправляется частному пользователю в пользовательский чат в зависимости от идентификатора содержимого.Невозможно назначить должен быть экземпляр в форме save

Я делаю это так, поэтому я могу получить информацию о содержимом в частном чате.

Проблема заключается в том, что когда пользователь отправить форму отправить comment я получаю эту ошибку:

Невозможно назначить «< Пользователь: my_user>»: «userComment.seller» должен быть «Профиль» пример.

На мой взгляд, я экономлю подключенного пользователя как buyer и пользователь, который будет получать свой комментарий, как seller.

Как исправить эту ошибку? Что я делаю неправильно в коде ниже?

здесь models.py:

class Profile(models.Model): 
    name = models.CharField(max_length=120) 
    user = models.OneToOneField(User, null=True, blank=True) 

class Gig(models.Model): 
    profile = models.ForeignKey(Profile, null=True) 
    title = models.CharField(max_length=100, unique=True) 

class userComment(models.Model): 
    buyer = models.ForeignKey(User, related_name="buyer", null=True) 
    seller = models.ForeignKey(Profile, related_name="seller", null=True) 
    comment = models.TextField(max_length=255, null=True) 

views.py

def addComment(request, gig_id): 
    gig = Gig.objects.get(id=gig_id) 
    username = gig.profile.user 

    if request.method == 'POST': 
     form = userCommentForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.save(buyer=request.user) 
      return HttpResponseRedirect('/') 

    else: 
     form = userCommentForm() 
     form.fields['seller'].initial = username 

forms.py

class userCommentForm(forms.Form): 
    seller = CommaSeparatedUserField(label=_(u"seller")) 
    comment = forms.CharField(label=_(u"comment"), widget=forms.Textarea()) 

    def save(self, buyer): 
     sellers = self.cleaned_data['seller'] 
     comment = self.cleaned_data['comment'] 
     message_list = [] 
     for seller in sellers: 
      msg = userComment(buyer=buyer, seller=seller, comment=comment,) 

      if seller == buyer: 
       print('-----------------------------------------------') 
       print('same') 

      if None is not None: 
       msg.parent_msg = None 
       None.save() 
      msg.save() 
      message_list.append(msg) 

     return message_list 

Traceback:

File "C:\Python34\projects\tryTen\private_comment\views.py" in addComment 
    31.    form.save(buyer=request.user) 

File "C:\Python34\projects\tryTen\private_comment\forms.py" in save 
    15.    msg = userComment(buyer=buyer, seller=seller, comment=comment,) 
+0

Проверьте тип продавца. и способ конвертировать его в тип «Профиль». – Prajwal

ответ

2

ваша userComment модель имеет Фейлд seller в качестве внешнего ключа в другую модель под названием Profile. Но экземпляр покупателя, переданный в msg = userComment(buyer=buyer, seller=seller, comment=comment,), имеет тип User, а не тип Profile.

Либо изменить seller = models.ForeignKey(Profile, related_name="seller", null=True) к seller = models.ForeignKey(User, related_name="seller", null=True) или получать и передавать Profile экземпляр.

p = Profile.objects.get(user=seller) 
msg = userComment(buyer=buyer, seller=p, comment=comment) 
1

Ваше поле пользователя CommaSeparatedUserField, как представляется, пользовательское поле, которое вы не поделились с нами. Однако легко видеть, что ваши cleaned_data фактически являются списком имен продавцов, а не Seller экземпляров. Если с другой стороны, он содержит идентификатор, вы можете просто сделать:

msg = userComment(buyer=buyer, seller_id=seller, comment=comment,) 

если это просто имя

sl = Profile.objects.get(name=seller) # adjust this according to your model 
msg = userComment(buyer=buyer, seller_id=sl, comment=comment,) 

 Смежные вопросы

  • Нет связанных вопросов^_^