models.py
from __future__ import unicode_literals
from django.db.models.signals import post_save
from django.db import models
# Create your models here.
from django.contrib.auth.models import User
class Friend(models.Model):
users = models.ManyToManyField(User)
current_user = models.ForeignKey(User, related_name = 'owner',null=True)
@classmethod
def make_friend(cls, current_user, new_friend):
friend, created = cls.objects.get_or_create(
current_user = current_user
)
friend.users.add(new_friend)
@classmethod
def lose_friend(cls, current_user, new_friend):
friend, created = cls.objects.get_or_create(
current_user = current_user
)
friend.users.remove(new_friend)
class Post(models.Model):
post=models.CharField(max_length=500)
user=models.ForeignKey(User)
data = models.DateTimeField(auto_now=True)
class UserProfileManager(models.Manager):
def queryset(self):
return super(UserProfileManager,self).get(queryset).filter(city='surat')
class UserProfile(models.Model):
user = models.OneToOneField(User)
description = models.CharField(max_length=100,default='')
city = models.CharField(max_length=100,default='')
website = models.URLField(default='')
phone = models.IntegerField(default=0)
image = models.ImageField(upload_to='profile_image',blank=True)
surat = UserProfileManager()
def __str__(self):
return self.user.username
def create_profile(sender,**kwargs):
if kwargs['created']:
user_profile = UserProfile.objects.create(user=kwargs['instance'])
post_save.connect(create_profile,sender=User)
views.py
from django.http import HttpResponse
from django.shortcuts import render,redirect
from django.contrib.auth.forms import UserCreationForm
from tutorial import views
from accounts.forms import Registrationform,EditProfileForm
from django.contrib.auth.forms import UserChangeForm,PasswordChangeForm
from django.contrib.auth.models import User
from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.decorators import login_required
from django.views.generic import TemplateView
from .forms import HomeForm
from .models import Post,Friend
class HomeView(TemplateView):
template_name = 'accounts/home.html'
def get(self,request):
form = HomeForm()
posts=Post.objects.all()
users = User.objects.exclude(id=request.user.id)
friend =Friend.objects.get(current_user=request.user)
friends = friend.users.all()
args={
'form':form,'posts':posts,'users':users,'friends': friends
}
return render(request,self.template_name, args)
def post(self,request):
form = HomeForm(request.POST)
if form.is_valid():
post=form.save(commit=False)
post.user=request.user
post.save()
text =form.cleaned_data['post']
form = HomeForm()
return redirect('accounts:home')
args = {'form' : form,'text' : text}
return render(request, self.template_name,args)
def change_friends(request, operation, pk):
new_friend = User.objects.get(pk=pk)
if operation == 'add':
Friend.make_friend(request.user, new_friend)
elif operation == 'remove':
Friend.lose_friend(request.user, new_friend)
return redirect ('accounts:home')
def register(request):
if request.method == "POST":
form = Registrationform(request.POST)
if form.is_valid():
form.save()
return redirect('/accounts')
else:
return HttpResponse('please fill all the fields and make sure new password must be match')
else:
form = Registrationform()
args={'form' : form}
return render(request,'accounts/reg_form.html',args)
@login_required
def view_profile(request,pk=None):
if pk:
user = User.objects.get(pk=pk)
else:
user = request.user
args = {'user' : user}
return render(request,'accounts/profile.html',args)
@login_required
def edit_profile(request):
if request.user.is_authenticated():
#<p>Welcome, {{ user.username }}. Thanks for logging in.</p>
if request.method=="POST":
form = EditProfileForm(request.POST,instance=request.user)
if form.is_valid():
form.save()
return redirect('/accounts/profile')
else:
return HttpResponse("please go back and write correct values")
else:
form = EditProfileForm(instance=request.user)
args = {'form' : form}
return render(request,'accounts/edit_profile.html',args)
else:
HttpResponse("hllo")
return redirect('/accounts/login')
@login_required
def change_password(request):
if request.user.is_authenticated():
if request.method == "POST":
form = PasswordChangeForm(data=request.POST,user=request.user)
if form.is_valid():
form.save()
update_session_auth_hash(request, form.user)
return redirect('/accounts/profile')
else:
return HttpResponse("password does not match,go back and try again")
else:
form = PasswordChangeForm(user=request.user)
args = {'form' : form}
return render(request,'accounts/change_password.html',args)
else:
return redirect ('/accounts/login')
form.py
from django.contrib.auth.forms import UserCreationForm,UserChangeForm
from django.contrib.auth.models import User
#from django.forms import RegistrationForm,EditProfileForm
from django import forms
from accounts.models import Post
class HomeForm(forms.ModelForm):
post = forms.CharField(widget=forms.TextInput(
attrs={
'class':'form-control',
'placeholder' : 'write a post'
}
))
class Meta:
model = Post
fields = ('post',)
class Registrationform(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = (
'username',
'first_name',
'last_name',
'email',
'password1',
'password2',
)
def save(self,commit=True):
user=super(Registrationform,self).save(commit=False)
user.first_name= self.cleaned_data['first_name']
user.last_name=self.cleaned_data['last_name']
user.email=self.cleaned_data['email']
if commit:
user.save()
return user
class EditProfileForm(UserChangeForm):
#template_name = '/something/else'
class Meta:
model = User
fields = (
'email',
'first_name',
'last_name',
'password'
)
и ошибка
(.vEnv) jayu@broadwell-gt2:~/Desktop/tutorial$ heroku run python manage.py migrate
› Warning: heroku update available from 7.0.82 to 7.0.83
Running python manage.py migrate on ⬢ jaysuthar... up, run.5398 (Free)
/app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
""")
Operations to perform:
Apply all migrations: accounts, contenttypes, auth, admin, sessions
Running migrations:
Rendering model states... DONE
Applying accounts.0002_auto_20180514_0523...Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line
utility.execute()
File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 342, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/base.py", line 399, in execute
output = self.handle(*args, **options)
File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 200, in handle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/migrations/executor.py", line 92, in migrate
self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/migrations/executor.py", line 121, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/migrations/executor.py", line 198, in apply_migration
state = migration.apply(state, schema_editor)
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/migrations/migration.py", line 123, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/migrations/operations/fields.py", line 201, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 482, in alter_field
old_db_params, new_db_params, strict)
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 564, in _alter_field
old_default = self.effective_default(old_field)
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 210, in effective_default
default = field.get_db_prep_save(default, self.connection)
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 728, in get_db_prep_save
prepared=False)
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 720, in get_db_prep_value
value = self.get_prep_value(value)
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 1853, in get_prep_value
return int(value)
ValueError: invalid literal for int() with base 10: ''
Django продолжает выдавать следующее при развертывании проекта (ошибка во время миграции при запуске heroku run python manage.py migrate
)
ValueError: invalid literal for int() with base 10: ''
Я хочу развернуть этот проект на heroku, он успешно работает до
git push heroku master --forc
но при переносе базы данных с помощью этой команды:
heroku run python manage.py migrate
выдает ошибку valueerror.
где я допустил ошибку?
Если вы можете предоставитьлюбая помощь, я был бы очень признателен.
РЕДАКТИРОВАТЬ:
accounts.0002_auto_20180514_0523 файл:
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2018-05-14 05:23
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='userprofile',
name='phone',
field=models.IntegerField(default=0),
),
]