سؤال

يحتوي كائن المستخدم الخاص بي مع إطار الراحة على avatar_id و أ cover_id.ولكن بدلاً من عرض ذلك على واجهة برمجة التطبيقات، أريد أن يكون عنوان URL للصورة الرمزية الفعلي وعنوان URL للغلاف بالفعل.

لي User نموذج:

avatar_id = models.IntegerField()
cover_id = models.IntegerField()

لي UserAvatar نموذج:

id = models.IntegerField(primary_key=True)
user_id = models.IntegerField()
file_id = models.IntegerField()

لي Files نموذج:

id = models.IntegerField(primary_key=True)
filename = models.CharField(max_length=255)

نفس المفهوم مع UserCover.

كيف أقوم بإزالة avatar_id من نتائج /users/ وإضافة حقل الصورة الرمزية مع اسم ملف الصورة الرمزية الفعلي؟

هل كانت مفيدة؟

المحلول

لست متأكدًا من أنني أفهم سؤالك بشكل صحيح، ولكن هنا أعتقد أن المشاكل هي.عندما قرأت سؤالك، افترضت أنك مبتدئ، فأجبت على هذا النحو.آسف إذا لم يكن الأمر كذلك.

  • لا تحتاج إلى إضافة حقول المعرف، ويتم ذلك تلقائيًا بواسطة Django لأن جميع الجداول تحتاج إلى مفتاح أساسي.يمكنك تعريف PK فقط عندما تحتاج إلى تسميته بشيء آخر غير "id".
  • يجب عليك حقا قراءة البرنامج التعليمي جانغو والذي يشرح كيفية تحديد النماذج.يجب تعريف User.cover_id وUserAvatar.file_id على أنهما ExternalKey.إذا كنت لا تعرف ما هو المفتاح الخارجي، فتوقف عن اللعب بـ Django واقرأ البرنامج التعليمي لقاعدة البيانات من قبل.
  • يوجد بالفعل نموذج ومجموعة من الفصول الدراسية إدارة المستخدمين لديك في جانجو.يجب عليك استخدامها.على سبيل المثال، "ملف تعريف المستخدم" هو الطريقة الصحيحة للقيام بذلك توسيع نموذج المستخدم.
  • إذا أجبرت المستخدمين على اختيار صورة رمزية واحدة في مجموعة من الصور الرمزية المحددة مسبقًا، فلا بأس بما تريد القيام به.إذا كان بإمكان المستخدمين اختيار أي صورة رمزية (تحميل)، فيجب عليك استخدامها OneToOneField أو وضعها مباشرة في نموذج المستخدم (أو الملف الشخصي).

أنا لا أعرف ما هو UserCover, ، ولكن إليك الشكل الذي يمكن أن تبدو عليه نماذجك:

from django.contrib.auth.models import User

class UserProfile(models.Model):
    # Link to Django normal User (name, email, pass)
    user = models.ForeignKey(User, unique=True)

    # Any information that a user needs, like cover, wathever that is, age, sexe, etc.
    avatar = models.CharField(max_length=255)

أو مثل هذا إذا تم إعادة استخدام will كثيرًا:

class Avatar(models.Model):
    # name = ...
    # description = ...
    path = models.CharField(max_length=255)

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    avatar = models.ForeignKey(Avatar, unique=True)

    # other data
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top