#django #django-models #django-queryset
#django #django-модели #django-набор запросов
Вопрос:
У меня есть модель под названием MessagePerson
, в которой есть поля сведений, которые отображают сообщения для конкретного человека, сведения о котором находятся в Personal
моделях.
У меня даже есть отдельная модель, которая имеет ссылку на внешний ключ к Personal
классу.
class Personal(models.Model):
name = models.CharField(max_length=20,primary_key=True)
email = models.EmailField(blank=True,null=True)
address = models.CharField(max_length=50,blank=True,null=True)
contact = models.CharField(max_length=20)
pic = models.FileField(upload_to='image/',blank=True,null=True)
def __unicode__(self):
return self.name
class MessagePerson(models.Model):
person = models.ForeignKey(Personal, related_name='msg')
mname = models.CharField(max_length=30)
mPhone = models.CharField(max_length=20,blank=True,null=True)
memail = models.EmailField(blank=True,null=True)
message = models.CharField(max_length=200,blank=True,null=True)
def __unicode__(self):
return self.person.name
class GData(models.Model):
person = models.ForeignKey(Personal, related_name='everyperson')
place = models.CharField(max_length=40)
typeOfProperty = models.CharField(max_length=30)
typeOfPlace = models.CharField(max_length=20)
price = models.IntegerField()
def __unicode__(self):
return self.person.name
Теперь, что мне нужно, у меня есть id
of GData
, с помощью которого я должен сохранить сообщение для конкретного ‘MessagePerson using name of
Personal`
Запрос, который я использовал, является: Views.py
def message(request, g_id):
n = request.POST['bname']
p = request.POST['bphone']
e = request.POST['bemail']
m = request.POST['bmsg']
mperson = GData.objects.get(id=g_id).values('person')
msg_job = MessagePerson(person=mperson, mname=n, mPhone=p, memail=e, message=m)
msg_job.save()
return render_to_response('ivent.html', context_instance=RequestContext(request))
Теперь дело в том, что без какой-либо ошибки он даже не сохраняет сообщение : (
Пожалуйста, помогите мне получить результат: (
Ответ №1:
Что выделяется, так это то, что:
mperson = GData.objects.get(id=g_id).values('person')
вероятно, должно быть:
mperson = GData.objects.get(id=g_id).person
Вам также, вероятно, следует пересмотреть свою логику просмотра, просто быстро просматривая что-то вроде этого, немного лучше, но, вероятно, может быть улучшено:
from django.shortcuts import get_object_or_404
def message(request, g_id):
mperson = get_objects_or_404(GData, id=g_id).person
if request.method == 'POST':
n = request.POST.get('bname')
p = request.POST.get('bphone')
e = request.POST.get('bemail')
m = request.POST.get('bmsg')
msg_job = MessagePerson(person=mperson, mname=n, mPhone=p, memail=e, message=m)
msg_job.save()
return render_to_response('ivent.html', context_instance=RequestContext(request))
return HttpResponse('Not a post request')
Комментарии:
1. DT, ваше право — мой ответ не сработал бы — это научит меня не проверять ответ 🙂
2. @DTing: ваше решение работало, когда я использовал его в
python manage.py shell
, но через веб-сайт он не сохраняет объект. : (Должен ли я предоставить какие-либо дополнительные подробности? Сайт при отправке просто возвращает ту же страницу даже без уведомления об успешном выполнении, которое я создал.3. Вы проверили базу данных, чтобы увидеть, сохранен ли экземпляр?
4. Кроме того, после вашего сохранения кажется, что вы хотели бы перенаправить на другое представление, не render_to_response .
5. @DTing : Я проверил базу данных. Я проверил их через сайт администратора django. Если я помещу данные из
shell
, они будут сохранены. До этого была другая ситуация с тем же типом вставки. Это работает отлично. Но это не так. И да, я отображаю их на одной странице, не перенаправляя: (