Relația M2M sau 2 FK-uri?

Care dintre următoarele structuri ar fi preferabile:

# M2M
class UserProfile(models.Model):
    ...
    groups = models.ManyToManyField(Group)

class Group(models.Model):
    ...

sau -

# 2 FKs
class UserProfile(models.Model):
    ...

class Group(models.Models):
    ...

class GroupMember(models.Model):
    user = models.ForeignKey(UserProfile)
    group = models.ForeignKey(Group)

Care ar fi mai bine?

0

2 răspunsuri

Cele două sunt în esență aceleași. Când faci un M2M, Django creează automat un model intermediar, care este destul de mult exact ca modelul GroupMember . Cu toate acestea, acesta stabilește și anumite cârlige API care vă permit să accesați modelul Group direct din modelul UserProfile , fără a fi nevoiți să vă confruntați cu modelul intermediar.

Puteți obține aceleași cârlige adăugate înapoi utilizând prin așa cum explică @ San4ez, dar ați făcut lucrurile mai complicate. Crearea unui model personalizat prin este benefică numai dacă trebuie să adăugați câmpuri suplimentare la relație. În caz contrar, respectați valoarea implicită.

Pe termen scurt și scurt, # 1 este mai bine, doar pentru că este exact același lucru ca # 2, dar mai simplu și fără cod străin.

1
adăugat

De asemenea, puteți combina aceste două variante folosind prin opțiune

groups = models.ManyToManyField(Group, through='GroupMember')

Ce vrei să spui prin better ? De obicei, nu este necesar să creați un model intermediar (cu excepția cazului în care trebuie să stocați date suplimentare ).

ManyToManyField does his job perfectly, so don't write its functionality by yourself.

1
adăugat
MySQL - comunitatea Română
MySQL - comunitatea Română
19 participanți

Comunitatea română a programatorilor MySQL.