تضيف العلاقات مع Django وRest Framework حقول استبدال
-
26-12-2019 - |
سؤال
يحتوي كائن المستخدم الخاص بي مع إطار الراحة على 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
لا تنتمي إلى StackOverflow