2016-07-19 1 views
1

「post_id」を主キーフィールドとして含む「投稿」モデルを作成しました。投稿を作成しようとすると、「ひどく16進数のUUID文字列を形成しました」というエラーが発生しています。私はこれを解決するために私を助けてくれてありがとう。Python:問題を解決する方法:Djangoで「16進数のUUID文字列が不正に形成されました」

ここに私のコードです。

Models.py:

class Post(models.Model): 

    post_id = models.UUIDField(primary_key=True, default='uuid.uuid4', editable=False) 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    from1 = models.CharField(max_length=20) 
    To = models.CharField(max_length=20) 
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 

    objects = PostManager() 

    def __unicode__(self): 
     return self.post_id 

    def __str__(self): 
     return self.post_id 

    def get_absolute_url(self): 
     return reverse("posts:detail", kwargs={"post_id": self.post_id}) 

    class Meta: 
     ordering = ["-timestamp", "-Time"] 

views.py:

def post_create(request): 

    form = PostForm(request.POST or None) 
    if form.is_valid(): 
     instance = form.save(commit=False) 
     print(form.cleaned_data.get("post_id")) 
     instance.user = request.user 
     instance.save() 
     return HttpResponseRedirect(instance.get_absolute_url()) 
    context = { 
     "form": form, 
    } 
    return render(request, "loggedin_load/post_load.html", context) 
+0

なぜカスタム 'post_id'を作成しますか?デフォルトでは、Djangoモデルは 'id'と' pk'フィールドを含んでいます。あなたは 'post_id'を追跡するためにそれらのいずれか一つを使うことができます。 – jape

+0

完全なエラーは何ですか? – Pureferret

+3

引用符なしで試してみてください。 'default = uuid.uuid4' – Rohan

答えて

2

モジュールをインポートする必要があります。引用符は使用しないでください。'uuid.uuid4'

それは多少のようにする必要があります:

import uuid # The uuid module 
class Post(models.Model): 

    post_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) # using the function uuid4 on the module 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    from1 = models.CharField(max_length=20) 
    To = models.CharField(max_length=20) 
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 

    objects = PostManager() 

    def __unicode__(self): 
     return self.post_id 

    def __str__(self): 
     return self.post_id 

    def get_absolute_url(self): 
     return reverse("posts:detail", kwargs={"post_id": self.post_id}) 

    class Meta: 
     ordering = ["-timestamp", "-Time"] 

N.B私は上記のコードをテストしていませんでした、と私はあなたがpost_idのためにUUIDを必要はありませんコメントのいくつかに同意します。もっと知らないと、私はさらに助けにならなかった。

2

私はこのようなものだろう:

from django.utils.encoding import python_2_unicode_compatible 

@python_2_unicode_compatible 
class Post(models.Model): 
    # Instead of default, maybe do null=True to take old entries into account? 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    from1 = models.CharField(max_length=20) 
    # You may want to reconsider the naming of the "To" field 
    # to avoid capital letters and built-in functions 
    To = models.CharField(max_length=20) 
    timestamp = models.DateTimeField(auto_now_add=True) 

    objects = PostManager() 

    # You can remove this with the decorator above 
    # def __unicode__(self): 
     # return self.id 

    def __str__(self): 
     return self.id # acts as your post_id 

    def get_absolute_url(self): 
     return reverse("posts:detail", kwargs={"post_id": self.id}) 

    class Meta: 
     ordering = ["-timestamp", "-Time"] 

オブジェクトが作成されるたびに、それが自動的になりますがIDを割り当て、__unicode____str__、およびを入力します。

関連する問題